2011-06-14 74 views
1

我想在Java中創建一個Android應用程序(使用最新的Eclipse,ADT和最新的Android SDK Ubuntu 11.10)。在線程內修改父類變量

我有下面螺紋它的父類的函數內:

new Thread(new Runnable(){ 
      public void run(){ 
        try{ 
         list_items = rtm_instance.update_notes_list(list_items); 
         list_items.add("test"); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
     } 
}).start(); 

list_itemsrtm_instance是在其內該線程被寫入的類的成員變量。看來線程裏面的list_items是父類中list_items的線程點start()的快照。

儘管rtm_instance.update_notes_list按預期返回更新的備註列表,但對list_items所做的更改似乎並未修改父類中的相同變量。修改list_items無非是修改線程內的所述變量的副本

我想修改也發生在父(UI)線程中,以便Android ListAdapter檢測到這些並修改相應的ListView。如何從上面發佈的子線程修改父線程變量list_items

謝謝!

+0

易變的變量就像是每次由線程引用的東西..所以,如果你讓list_items易變,那麼它會更新 – ngesh 2011-06-14 11:34:01

+0

@devA這並沒有幫助,使用'runOnUiThread'雖然工作。 – 2011-06-14 12:11:24

回答

1

您可能希望更新發生在UI線程上。你應該從UIThread發佈一個可運行的處理程序。或者,你可以調用runOnUiThread。要在父級上有列表,可以在父級上定義一個名爲updateList(String val)的方法,並調用它而不是直接更改列表。

+0

是的,我希望更新發生在UI線程上。對不起,如果它很混亂。編輯了這個問題。 – 2011-06-14 11:22:27

+0

我用'runOnUiThread',它工作。感謝您幫助我! – 2011-06-14 11:47:11