7

我有一个有 TextView 的活动,我想不断更新文本..

在 Java 中,我可以创建一个无限的 while 循环,并在每次迭代时设置文本。

但是当我尝试在 Android 中执行此操作时,它会显示黑屏,甚至不会加载活动。

我在方法中放入了无限onCreate,也许这就是它崩溃的原因..但如果是的话,我应该把它放在哪里?

4

2 回答 2

14

使用Handler和一个单独的线程/可运行来不断更新 TextView 而不是 While 循环:

Handler handler=new Handler();
handler.post(new Runnable(){ 
    @Override
    public void run() {
        // upadte textView here
        handler.postDelayed(this,500); // set time here to refresh textView
    }
});
于 2013-01-12T16:11:21.057 回答
4

最小的工作示例

基于https://stackoverflow.com/a/14295193/895245

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class Main extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final int i = 0;
        final TextView textView = new TextView(this);
        textView.setText(String.format("%d", i));
        setContentView(textView);
        final Handler handler = new Handler();
        class MyRunnable implements Runnable {
            private Handler handler;
            private int i;
            private TextView textView;
            public MyRunnable(Handler handler, int i, TextView textView) {
                this.handler = handler;
                this.i = i;
                this.textView = textView;
            }
            @Override
            public void run() {
                this.handler.postDelayed(this, 500);
                this.i++;
                this.textView.setText(String.format("%d", i));
            }
        }
        handler.post(new MyRunnable(handler, i, textView));
    }
}

您可以将其复制粘贴到由 生成的主要活动中android create project [...],您将在您的应用程序上看到一个计数器。

在安卓 22 上测试。

于 2016-02-05T14:23:33.187 回答