繁体   English   中英

使用Timer和ArrayList更新TextView

[英]Update TextView using Timer and ArrayList

我正在编写一个小程序来每5秒更新一次TextView。 但我无法每5秒更新一次textview的文本,特别是当涉及到最后一个arraylist项目时,例如:C代码如下

我正在学习教程

public class MainActivity extends Activity {

 Timer timer;
 MyTimerTask myTimerTask;
 List<String> list;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  textCounter = (TextView)findViewById(R.id.counter);

  timer = new Timer();
  myTimerTask = new MyTimerTask();

  timer.schedule(myTimerTask, 1000, 5000);

  ....  

  list = new ArrayList<String>();
  list.add("A");
  list.add("B");
  list.add("C");

 }

 class MyTimerTask extends TimerTask {

  @Override
  public void run() {

   runOnUiThread(new Runnable(){

    @Override
    public void run() {
     for(int i=0; i<list.size(); i++) {
        textCounter.setText(list.get(i).toString());
     }
     }});
   }}

每次调用run方法时都不要迭代列表。 而是从列表中获取一个项目并将其设置为TextView。

private int count =0;
private class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textCounter.setText(list.get(count%list.size).toString());
                count++;
            });
       }
    }
}

而不是使用TimerTask您应该使用Handler来更新TextView

Handler mHandler = new Handler();
final Runnable runnable = new Runnable() {
     int count = 0;
     @Override
     public void run() {
         count++;
         textCounter.setText(list.get(count).toString());
         mHandler.postDelayed(this, 5000); // five second in ms
     }
};
mHandler.postDelayed(runnable, 1000); 

我希望这可以帮助你。

如下所示更改MyTimerTask类。

private int position = 0;

class MyTimerTask extends TimerTask {

    @Override
    public void run() {

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if (position >= list.size()) {
                    position = 0;
                }

                textCounter.setText(list.get(position).toString());
                position++;

            }
        });
    }


}

这里我有一些代码片段,它只是在每5秒后更新Textview。

第1步:首先,您只需制作一个单独的方法,其中Textview是Update,如下所示。

 private void updateTextView(){
    /**
     * Write Your Textview Update Code
     */

}

步骤2在一段特定时间后,声明Runnable类的对象,即Just Call updateTextview方法。

 Runnable run = new Runnable() {

    @Override
    public void run() {

        updateTextView();

    }
};

步骤3您可以使用以下代码启动此runnable。

YOUR_TEXTVIEW.postDelayed(run,5000);

我希望你清楚我的想法。

最好的运气

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM