2011-08-09 82 views
0

我需要每5秒刷新一次TextViews,我創建了TimerTask(並在contrsuctor中設置了Activity參數),但是出現錯誤,我只能從創建它們的線程訪問小部件。更新TExtViews問題 - 替代擴展TimerTask

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.system_data_show); 
    currentActivity = this; 
    Timer timer = new Timer(); 
    timer.schedule(new SystemTimerTask(currentActivity),500, 5000); 
    ///////////////// text views from layout ///////////////////////////////////////////// 
    TextView txtCapture = (TextView) this.findViewById(R.id.txtCapture); 
    txtCapture.setText("System Data"); 
    TextView txtWorkAllowedValue=(TextView)this.findViewById(R.id.workAllowedValue); 
    TextView txtBusBroken0Value=(TextView)this.findViewById(R.id.busBroken0Value); 
    TextView txtBusBroken1Value=(TextView)this.findViewById(R.id.busBroken1Value); 
    TextView txtShortCircuit0Value=(TextView)this.findViewById(R.id.shortCircuit0Value); 
    TextView txtShortCircuit1Value=(TextView)this.findViewById(R.id.shortCircuit1Value); 
    TextView txtErrorConfigurationValue=(TextView)this.findViewById(R.id.errorConfigurationValue); 
    } 

如何刷新此textViews每5秒?有什麼辦法不擴展TimerTask,也許o實現一些接口(我不知道哪個),所以我的SActivity擴展Activity實現了那個接口?

回答

1

你可以做的是創建一個內部的AsyncTask類,它將在後臺做功(獲取想要刷新textview的數據)以及完成該工作的時間在後臺您將結果發佈到onPostExecute(您可以在此更新UI textview)方法。

之後你有內部的AsyncTask類你在你的計時器這樣每5秒做一些事情:

new MyAsyncTask.execute();

1

你可以使用Activity.runOnUiThread(Runnable)更新計時器線程上的UI組件在Android developer pageAPI Doc page

解釋的。如果這不適合你需要,你也可以使用View.post(Runnable)什麼方法(也在上面的開發者頁面上解釋)