2016-01-18 33 views
4

我正在寫一個小程序來每5秒更新一次TextView。但我無法更新每隔5秒我的TextView的文本,尤其是當它涉及到持續ArrayList的項目,如:C以下代碼使用Timer和ArrayList更新TextView

我下面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()); 
    } 
    }}); 
    }} 
+0

相反的迭代列表,你爲什麼不設置TextView的有一次在一個文本。 –

+0

不要使用計時器任務它不能正常工作,請使用處理程序。 –

+0

你在哪裏調用timer.start()方法來啓動Timer。 –

回答

2

不要重複列表每次運行方法都要調用。而是從列表中獲取一個項目並將其設置爲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++; 
      }); 
     } 
    } 
} 
+0

您能以簡單的方式顯示我嗎? – Sun

+0

@孫我剛剛修改了代碼中的幾行。你瞭解上面的代碼嗎? –

+0

@孫你只需要修改'MyTimerTask'類不是所有的代碼。 –

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++; 

      } 
     }); 
    } 


} 
+0

不幸的是,當涉及到最後一項... – Sun

+0

我編輯了我的答案,請現在檢查。 @Sun –

+0

現在它只顯示第一個ArrayList .... – Sun

1

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

我希望這可以幫助你。

1

這裏我有一些代碼片段,它只是每5秒鐘更新Textview。

第1步: 首先你只是做一個saperate方法,其中的TextView是更新類似以下。

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

} 

步驟2 可運行類的申報對象,其只需調用updateTextview方法中的一些特定的時間之後。

Runnable run = new Runnable() { 

    @Override 
    public void run() { 

     updateTextView(); 

    } 
}; 

步驟3 可以啓動此可運行使用下面的代碼。

YOUR_TEXTVIEW.postDelayed(run,5000); 

我希望你清楚我的想法。

祝您好運