2010-11-24 71 views
2
view.setText("hello"); 
wait(1000); 
view.setText("world"); 

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

+0

你可以分享更多的代码? – st0le 2010-11-24 07:56:47

回答

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");  
    } 
}; 
0

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

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

主循环:元素 2)的

1)修饰刷新屏幕。

这里发生了什么是 修改为hello 等待 修改为世界 刷新。

你使主线程等待,但接口永不刷新时间

之间

解决这个你有几种方法:

-Thread修改,以便您的等待,不影响显示器 像

new Thread(new Runnable(){ 
    public void run(){ 
     wait(1000); 
     view.setText(); 
    } 
} 
  • 无效的观点。这是告诉显示器有什么变化并需要重新绘制的方式。
+0

您遇到问题了......他正在屏蔽UI线程并等待,但您的解决方案并不完全正确。您不应该从后台线程更新UI。您应该使用处理程序并将消息发送回UI线程以更新视图。 – 2010-11-24 08:16:30

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();