更新Android中的TextView

时间:2010-11-24 07:50:58

标签: android android-ui

view.setText("hello");
wait(1000);
view.setText("world");

当我调用上面的函数时,视图根本不显示“hello”。文本仅在完成功能完成时更新。我有什么需要打电话来看“你好”?

3 个答案:

答案 0 :(得分:5)

问题是您正在更新阻止UI线程的UI,然后再次更新它。你不应该睡觉UI线程,这是不好的做法,用户不会喜欢它。

线程可以解决问题,但你真的不需要一个线程来处理你在这里做的事情(同样,你不应该从后台线程更新UI,你需要使用一个处理程序来发送一条消息)。

您应该使用处理程序来执行此类简单更新,因为它不会在应用程序中使用其他线程。您可以在其上使用postDelayed方法让它在特定时间内回调到您的UI线程。

本文http://developer.android.com/resources/articles/timed-ui-updates.html涵盖了实现定时UI更新的过程,非常简单。

要转换您的示例:

//member variable
private Handler mHandler = new Handler();

//In your current Method
view.setText("hello"); 
mHandler.postDelayed(mUpdateTimeTask, 1000);

//Member variable
private Runnable mUpdateTimeTask = new Runnable() {
   public void run() {
      view.setText("world");      
   }
};

答案 1 :(得分:1)

我在开发人员中心找到了这段代码并且工作正常:

view.setText("hello");
new CountDownTimer(1000, 100) {
    TextView view = (TextView) findViewById(R.id.view);

    public void onTick(long millisUntilFinished) { }

    public void onFinish() {         
        view.setText("World!")
    }
}.start();

答案 2 :(得分:0)

我想我知道你的问题是什么。

修改UI对象时,它会更改其状态,但不会直接更改屏幕。每个系统的工作方式略有不同,但基本逻辑是相同的

主循环:

1)元素的修改 2)刷新屏幕。

这里发生的事情是 你好 等待 修改为世界 刷新。

你让主线程等待,但界面永远不会在时间之间刷新

要解决这个问题,你有几种方法:

- 更改修改,以便您的等待不会影响显示

之类的东西
new Thread(new Runnable(){
    public void run(){
        wait(1000);
        view.setText();
    }
}
  • 使视图无效。它是向显示器发出信号通知表明某些内容已发生变化且需要重新绘制的方式。