Google Glass Immersion - OnClick 无法在单独的线程中运行
Google Glass Immersion - OnClick not working inside a separate thread
我的问题很简单。我正在根据在单独线程内执行的 HTTP 查询的结果创建一张卡片。该卡还有一个 onclick 方法,并在位于单独线程内的 runOnUiThread() 中定义。但是,当点击设备时,不会触发 onclick 事件。
这是我的代码:
private void login() {
Runnable r = new Runnable() {
@Override
public void run() {
// irrelevant code
runOnUiThread(new Runnable() {
@Override
public void run() {
setContentView(buildError(code));
}
}
}
Thread t = new Thread(r);
t.start();
}
private View buildError(String code) {
CardBuilder card = new CardBuilder(this, CardBuilder.Layout.ALERT);
card.setIcon(R.drawable.ic_warning_150);
if (code.equals("1"))
card.setText("Incorrect credientals");
else
card.setText("Unexpected error");
card.setFootnote("Tap to try again");
View cView = card.getView();
cView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Event", "Clicked"); // This is what isn't triggering
}
});
cView.setFocusable(true);
cView.setFocusableInTouchMode(true);
return cView;
}
即使代码片段包含错误(无法编译,在 Runnable 语句中缺少 ;
),您的方向是正确的。
View 只需请求焦点即可立即可点击。否则您将不得不手动移动焦点。
cView.setFocusable(true);
cView.setFocusableInTouchMode(true);
cView.requestFocus();
我的问题很简单。我正在根据在单独线程内执行的 HTTP 查询的结果创建一张卡片。该卡还有一个 onclick 方法,并在位于单独线程内的 runOnUiThread() 中定义。但是,当点击设备时,不会触发 onclick 事件。
这是我的代码:
private void login() {
Runnable r = new Runnable() {
@Override
public void run() {
// irrelevant code
runOnUiThread(new Runnable() {
@Override
public void run() {
setContentView(buildError(code));
}
}
}
Thread t = new Thread(r);
t.start();
}
private View buildError(String code) {
CardBuilder card = new CardBuilder(this, CardBuilder.Layout.ALERT);
card.setIcon(R.drawable.ic_warning_150);
if (code.equals("1"))
card.setText("Incorrect credientals");
else
card.setText("Unexpected error");
card.setFootnote("Tap to try again");
View cView = card.getView();
cView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Event", "Clicked"); // This is what isn't triggering
}
});
cView.setFocusable(true);
cView.setFocusableInTouchMode(true);
return cView;
}
即使代码片段包含错误(无法编译,在 Runnable 语句中缺少 ;
),您的方向是正确的。
View 只需请求焦点即可立即可点击。否则您将不得不手动移动焦点。
cView.setFocusable(true);
cView.setFocusableInTouchMode(true);
cView.requestFocus();