我正在编写一个小程序来每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());
}
}});
}}
答案 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);
我希望你对我的想法很清楚。
最好的运气