view.setText("hello");
wait(1000);
view.setText("world");
当我调用上述函数时,视图根本不显示“你好”。文本仅在完整功能完成时更新。我要打什么电话才能看到“你好”?
view.setText("hello");
wait(1000);
view.setText("world");
当我调用上述函数时,视图根本不显示“你好”。文本仅在完整功能完成时更新。我要打什么电话才能看到“你好”?
问题是您正在更新 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");
}
};
I found this code on developer center and works fine:
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();
我想我知道你的问题是什么。
当您修改 UI 对象时,它会更改其状态,但不会直接更改屏幕。每个系统的工作方式略有不同,但基本逻辑是相同的
主循环:
1)元素的修改 2)刷新屏幕。
这里发生的是修改你好等待修改世界刷新。
你让主线程等待,但界面从不刷新
要解决这个问题,您有几种方法:
-线程修改,以便您的等待不会影响显示,例如
new Thread(new Runnable(){
public void run(){
wait(1000);
view.setText();
}
}