[英]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.