2011-02-06 154 views
0

我想在我的主活動視圖中更新textview。更新來自其他活動的主要活動值

我有main.xml文件,其中包含屏幕上的主應用程序ascreen, ,我有textview,我需要不時從另一個活動(類)更新。

如果我嘗試從主要活動更新這些值,它會很好地工作,但是當我試圖從不同的活動中完成時,應用程序會崩潰。

這裏是主要活動的方法,我需要知道如何從其他活動調用它。

主要活動方式:

public void update_counters(){  
     TextView sms_textview = (TextView) findViewById(R.id.sms_textview); 
     sms_textview.setText(String.valueOf(sms_missed)); 
    } 

請幫助

回答

-2

有隻有一個主活動的實例?如果是這樣,請在主活動類中存儲一個靜態引用,並將其初始化爲onCreate。然後有一個使用該參考獲取到該實例的靜態方法:

static MainActivity TheMainActivity; 

static public void update_counters() 
{ 
    TextView sms_textview = (TextView) TheMainActivity.findViewById(R.id.sms_textview); sms_textview.setText(String.valueOf(sms_missed)); 
} 

中其他活動:

MainActivity.update_counters(); 

這就是所謂的單。或者,有時候是全球性的。

1

事實上,對活動(或其他上下文)進行靜態引用是一種不好的做法。活動被設計爲相互獨立。

您可以從使用startActivityForResult()方法啓動的活動接收結果並進行適當的反應。

0

就像@羅曼說,從其他活動中觸摸UI的東西是一種不好的做法,活動應該是獨立的。你可以做什麼,有點重新設計你的消息傳遞方法。一個可能是好的是使用廣播接收器,它也保證了程序更好的可擴展性。

因此,無論何時您的'其他'活動需要調用update_counters,它都會轉而廣播這樣一個意圖。您以前的MainActivity應該註冊才能收聽該廣播,並根據需要更新UI。最好的是,你可以有多個該活動的實例,或者可以註冊到該廣播的其他活動。