Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更改多个文本视图的文本_Android_Eclipse_Textview - Fatal编程技术网

Android 如何更改多个文本视图的文本

Android 如何更改多个文本视图的文本,android,eclipse,textview,Android,Eclipse,Textview,嗨,对不起我的英语!:) 我想在3秒后用随机数更改文本视图的文本,但它只是显示最后一个数字,我没有在文本视图中看到最后一个数字 我该怎么办 谢谢……:) 导入android.app.Activity; 导入android.os.Bundle; 导入android.os.Handler; 导入android.widget.TextView; 公共类测试活动扩展了活动{ 国际兰特; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){

嗨,对不起我的英语!:) 我想在3秒后用随机数更改文本视图的文本,但它只是显示最后一个数字,我没有在文本视图中看到最后一个数字

我该怎么办

谢谢……:)

导入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);
                }
            });
        }
    }
}