2013-10-21 83 views
0

我編輯的是cSipSimple驗證碼:https://code.google.com/p/csipsimple/source/browse/trunk/CSipSimple/src/com/csipsimple/ui/incall/InCallCard.java?spec=svn2170&r=2170runOnUiThread不支持它

,並希望添加這個方法:但是我得到的錯誤

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

關於如何正確地做任何想法?

+0

發佈您的課程代碼已滿。 'runOnUiThread'是活動類的一種方法。所以你需要Activity上下文。 – Raghunandan

+0

@Raghunandan我在鏈接中發佈了完整的代碼。 – Paul

+0

@Tarsem這就是我想要做的,不知道如何。 – Paul

回答

6

由於您想從非Activity類的UI線程中運行某些內容,因此可以使用Handler代替。

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

謝謝,確實刪除錯誤,有沒有辦法實際上將此runonui方法從活動傳遞到此視圖以任何方式? – Paul

+0

@Paul:我不明白你爲什麼不選擇這個解決方案。但是,是的,你可以添加活動作爲參數在「pushtotalk2」方法,並調用activity.runOnUi .... – Carnal

+1

我看到謝謝你,我確實使用你的方法:) – Paul

1

runOnUiThread未針對視圖定義。僅限於活動。而InCallCard只是一個視圖。

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