Android 如何更改多个文本视图的文本
嗨,对不起我的英语!:) 我想在3秒后用随机数更改文本视图的文本,但它只是显示最后一个数字,我没有在文本视图中看到最后一个数字 我该怎么办 谢谢……:)Android 如何更改多个文本视图的文本,android,eclipse,textview,Android,Eclipse,Textview,嗨,对不起我的英语!:) 我想在3秒后用随机数更改文本视图的文本,但它只是显示最后一个数字,我没有在文本视图中看到最后一个数字 我该怎么办 谢谢……:) 导入android.app.Activity; 导入android.os.Bundle; 导入android.os.Handler; 导入android.widget.TextView; 公共类测试活动扩展了活动{ 国际兰特; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.widget.TextView;
公共类测试活动扩展了活动{
国际兰特;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
最终文本视图txtShow=(文本视图)findviewbyd(R.id.txtShow);
Handler=newhandler();
对于(int i=0;i<5;i++)
{
rand=(int)(Math.random()*9);
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
txtShow.setText(“+rand”);
}
}, 3000);
}
}
}
您不需要循环。在这种情况下,您可以使用postDealyed在ui线程队列中重新发布runnable:
公共类测试活动扩展了活动{
int rand;
int counter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView txtShow = (TextView) findViewById(R.id.txtShow);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (counter > 4) {
handler.removeCallbacks(this);
return;
}
++counter;
rand = (int) (Math.random() * 9);
txtShow.setText("" + rand);
handler.postDelayed(this, 3000);
}
}, 3000);
}
}
当计数器达到5时,
removeCallbacks
取消处理程序队列中仍然存在的所有可运行项并返回。否则计数器将增加并handler.postDelayed
将可运行项添加到处理程序队列中,我认为这应该有效
private Handler handler;
private TextView txt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler = new Handler();
txt = (TextView) findViewById(R.id.txt);
new Thread(new Task()).start();
}
class Task implements Runnable {
@Override
public void run() {
for (int i = 0; i <= 5; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
int rand = (int) (Math.random() * 9);
txt.setText("" + rand);
}
});
}
}
}
私有处理器;
私有文本视图;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler=新的handler();
txt=(TextView)findViewById(R.id.txt);
新线程(新任务()).start();
}
类任务实现可运行{
@凌驾
公开募捐{
对于(int i=0;i而言,问题在于所有正在更改TextView
的Runnable
都是一个接一个地执行的;更改如此之快,以至于您无法看到中间值,而只能看到最终值
要解决您的问题,请将postDelayed()
中的延迟从3000
更改为3000*i
。这将确保每个更新之间间隔3秒,而不是在onCreate()
完成后仅执行所有更新3秒(现在是这样)
对于这样的事情,您可能还需要查看计时器()
private Handler handler;
private TextView txt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler = new Handler();
txt = (TextView) findViewById(R.id.txt);
new Thread(new Task()).start();
}
class Task implements Runnable {
@Override
public void run() {
for (int i = 0; i <= 5; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
int rand = (int) (Math.random() * 9);
txt.setText("" + rand);
}
});
}
}
}