Android 2.2:如何使用计时器自动更新文本视图?

时间:2010-12-29 22:51:28

标签: android timer textview

我的应用中有一些TextView,我想每5秒自动更新一次。我有一个刷新它们的方法,但是如何制作一个每5秒运行一次方法的计时器?谢谢!

3 个答案:

答案 0 :(得分:4)

看看扩展CountDownTimer,它有一个onFinish()方法,你可以覆盖它来更新你的TextView,如果你想重复它,就重启计时器。如果您只想更新有限次数,也可以绑定到onTick()。

答案 1 :(得分:4)

提供另一种解决方案

Handler h=new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.setContentView(R.layout.main);
    h.post(new Runnable(){

        @Override
        public void run() {
            // call your function
            h.postDelayed(this,5000);

        }

    });

答案 2 :(得分:-1)

我自己尝试了Handler解决方案,尤其是在资源页面上阅读本文之后:http://developer.android.com/resources/articles/timed-ui-updates.html。但是我希望能够像秒表一样启动和停止计时器,并且在恢复计时器之后,处理程序解决方案开始更新更少 - 在模拟器上大约每五秒钟一次。最后,我在博客上发现了一个提示,其中一个内部类扩展了AsyncTask。您可以使用AsyncTask中的publishProgress() - onProgressUpdate()功能。从onProgressUpdate()开始,您可以在UI线程中“直接”进行更改,例如myTextView.setText(...)。这会更频繁地发布结果。这是内部类的超级简单实现:

private class UpdateTimerLabel extends AsyncTask<Integer, Integer, Integer> {

    @Override
    protected Integer doInBackground(Integer... arg0) {
        while (true) {
            try {
                Thread.sleep(1000);
                publishProgress(arg0);
                Log.d(tag, "AsyncTask tries to publish");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }if (1 == 0) break; // Silly but necessary I think

        }
        return null;
    }
    protected void onProgressUpdate(Integer... progress) {
        updateTimerTextView(); // Call to method in UI
    }
}