更新TExtViews问题 - 扩展TimerTask的替代方法

时间:2011-08-09 22:22:40

标签: android

我需要每隔5秒刷新一次TextViews,我已经创建了TimerTask(并在contrsuctor中设置了Activity like参数),但是我得到的错误是我只能从创建它们的线程访问小部件。

@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);
    }

如何每5秒刷新一次textViews?有没有办法不扩展TimerTask,也许o实现一些接口(我不知道哪个)所以我的SActivity扩展Activity实现了那个接口?

3 个答案:

答案 0 :(得分:1)

您可以使用Handler及其postDelayed()功能。这样,您不需要仅为计时目的创建单独的线程。有关示例,请参阅:Repeat a task with a time delay?

答案 1 :(得分:1)

您可以使用Activity.runOnUiThread(Runnable)更新Timer线程上的UI组件,如Android developer pageAPI Doc page

所述

如果这不符合您的要求,您也可以使用View.post(Runnable)方法(也在上面的开发者页面上解释)

答案 2 :(得分:1)

你可以做的是创建一个内部AsyncTask类,它将在后台工作(获取你想要刷新textview的数据),当在后台完成这项工作时,你将结果发布在onPostExecute中(你可以在这里更新UI textview)方法。

拥有AsyncTask内部类之后,你每隔5秒就会在你的计时器中做一些事情:

new MyAsyncTask.execute();