2011-11-26 86 views
0

我有一個活動,設置自定義創建的視圖「onCreated」和一個線程啓動,此線程週期每23ms和「無效」此視圖,因此它的onDraw幾乎總是被調用。更改活動視圖

該視圖在屏幕上繼續顯示,直到用戶點擊它(onTouchEvent)並且視圖執行一些操作並準備好啓用公共標誌時,活動「知道」何時視圖被激活並使其處理,在此活動應該將其視圖更改爲另一個自定義創建的視圖,問題是因爲標誌檢查是在線程的運行方法中完成的,活動發送「CallFromWrongThreadException」,這是因爲據我瞭解「正在更改」在另一個線程(而不是UI)中。

我已經設置了runOnUiThread來繞過這個,並且srceen完全變黑。

此外,我試圖將活動設置爲framelayout,其中我在乞討中添加了兩個視圖,並且線程更改了視圖的可見性,但沒有成功。

回答

1

所有的視圖操作必須發生在UI線程上。有幾種方法可以做到這一點。一種方法是使用AsyncTask來執行後臺工作,因爲它具有在後臺工作完成後在UI線程上運行代碼的方法。

另一種選擇是後你想通過視圖本身運行的代碼,如:

mMyView.post(new Runnable() { 
    public void run() { 
     mMyView.doSomething(); 
    } 
}); 

此方法將用於切換現有視圖的可見性工作。

這是這些方法中的一個很好的概述:http://android-developers.blogspot.com/2009/05/painless-threading.html

+0

莫非mMyView.doSomething();是mMyView.setVisibility(View.INVISIBLE)?這可能非常有用:D –

+0

是的。這應該很好。 – goto10