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();

Reference