如何在无限循环中不断更新活动中的 TextView?
Posted
技术标签:
【中文标题】如何在无限循环中不断更新活动中的 TextView?【英文标题】:How to update a TextView in an activity constantly in an infinite loop? 【发布时间】:2012-12-27 00:54:33 【问题描述】:我有一个带有 TextView 的活动,我想不断更新文本..
在 Java 中,我可以创建一个无限的 while 循环,并在每次迭代时设置文本。
但是当我尝试在 android 中执行此操作时,它会显示黑屏,甚至不加载活动。
我将无限放在onCreate
方法中,也许这就是它崩溃的原因..但如果是,我应该把它放在哪里?
【问题讨论】:
你不应该有一个无限循环,至少不是在主线程上。它的目的是什么? :-) 好吧,我想要一些东西无限更新(或至少不断更新) 类似:***.com/questions/11295152/… || ***.com/questions/1099640/main-loop-in-android ***.com/questions/8123231/… || ***.com/questions/5464990/… 【参考方案1】:使用Handler 和一个单独的线程/runnable 来不断更新 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
);
【讨论】:
如果您打算将处理程序作为该闭包的一部分引用,您需要将它作为 final 。【参考方案2】:最小的工作示例
基于https://***.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 [...]
生成的主要活动中,您就会在您的应用上看到一个计数器。
在 Android 22 上测试。
【讨论】:
以上是关于如何在无限循环中不断更新活动中的 TextView?的主要内容,如果未能解决你的问题,请参考以下文章