使用Timer和ArrayList

时间:2016-01-18 07:28:50

标签: java android for-loop arraylist timer

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

我正在关注this教程

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

4 个答案:

答案 0 :(得分:2)

每次调用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++;
            });
       }
    }
}

答案 1 :(得分:2)

而不是使用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); 

我希望这会对你有所帮助。

答案 2 :(得分:1)

改变你的      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++;

            }
        });
    }


}

答案 3 :(得分:1)

这里我有一些代码片段,每隔5秒就更新一次Textview。

第1步: 首先,您只需制作一个单独的方法,其中Textview就像下面一样更新。

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

}

第2步 声明Runnable类的对象,它是在一段特定时间后调用updateTextview方法。

 Runnable run = new Runnable() {

    @Override
    public void run() {

        updateTextView();

    }
};

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

YOUR_TEXTVIEW.postDelayed(run,5000);

我希望你对我的想法很清楚。

最好的运气