runOnUiThread来自不支持它的类

时间:2013-10-21 11:57:12

标签: android

我正在使用cSipSimple编辑此代码:https://code.google.com/p/csipsimple/source/browse/trunk/CSipSimple/src/com/csipsimple/ui/incall/InCallCard.java?spec=svn2170&r=2170

并希望添加此方法:

public void pushtotalk2(final View view) {

        final boolean on = ((ToggleButton) view).isChecked();
        ((ToggleButton) view).setEnabled(false);

        new Thread(new Runnable() {
            @Override


    public void run() {
            try {
                Instrumentation inst = new Instrumentation();
                if (on) {

                    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_NUMPAD_MULTIPLY);
                    Thread.sleep(500);
                    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_9);
                    Thread.sleep(500);

                    runOnUiThread(new Runnable() {
                        public void run() {
                            ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy);
                            ((ToggleButton) view).setEnabled(true);
                        }
                    });
                } else {
                    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_POUND);
                    Thread.sleep(500);
                    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_9);
                    Thread.sleep(500);
                    runOnUiThread(new Runnable() {
                        public void run() {
                            ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy);
                            ((ToggleButton) view).setEnabled(true);
                        }
                    });
                }
            } catch (InterruptedException e) {
                Log.d(TAG, "Failed to send keycodes: " + e.getMessage());
            }
        }
    }).start();
}

但是我收到错误:runOnUiThread(new Runnable(){}) is undefined for the type new Thread(){}

我的理解是活动类有这个方法,但是如何从我的代码中访问它?

我尝试制作一个构造函数并得到了这个错误:

Implicit super constructor FrameLayout() is undefined. Must explicitly invoke another constructor

有关如何正确完成此操作的任何想法?

2 个答案:

答案 0 :(得分:7)

由于您希望在非Activity类的UI线程中运行某些内容,因此您可以使用Handler代替。

new Handler().post(new Runnable() {
     public void run() {
         ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy);
         ((ToggleButton) view).setEnabled(true);
     }
});

答案 1 :(得分:1)

没有为视图定义runOnUiThread。仅适用于活动。而InCallCard只是一个观点。

您可以使用post(Runnable)方法而不是runOnUiThread()。