英文:
Set a String to TextView and wait for a while and set another String to same TextView
问题
private void applicationTest() {
textTT.setText("First");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
textTT.setText("Second");
}
英文:
I want to set "First" word to TextView (textTT) and wait for a while set to "Second" to same TextView
but result is directly set "second" to TextView
but I need firstly set "First". How can I overcome this?
<>
private void applicationTest() {
textTT.setText("First");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
textTT.setText("Second");
}
答案1
得分: 2
Sure, here's the translated code snippet:
如果您调用Thread.sleep(1000),意味着UI线程将会被阻塞,UI不会先更新First。如果您想等待并设置Second,应该使用Handler。尝试这样做:
private void applicationTest() {
textTT.setText("First");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
textTT.setText("Second");
}
}, 1000);
}
英文:
If you call Thread.sleep(1000) it means UI thread will be blocking and UI not update First. If you want to wait and set Second you should use Handler. Try this
private void applicationTest() {
textTT.setText("First");
new Handler().postDelayed({
textTT.setText("Second");
}, 1000)
}
答案2
得分: 0
使用 thred.sleep 是一个非常糟糕的实践,因为它会冻结整个应用程序!所以你基本上是说:设置文本为 first 但什么都不做,然后设置 second。所以你会看到 second。
相反,你应该使用 Handler。在这种情况下,你可以说:设置 first,然后创建一个并行任务,等待1秒后再执行。1秒后它会设置 second。
以下是此代码:
private void applicationTest() {
textTT.setText("First");
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textTT.setText("Second");
}
}, 1000);
}
英文:
Using thred.sleep is a very bad practice since you freeze the whole app! So you basically say: set text first but do nothing, then set second. So you see second.
Instead you should use Handler. In that case you say: set first then create a parallel task that waits for 1sec before it executes. After 1 sec it sets second.
That is the code for this:
private void applicationTest() {
textTT.setText("First");
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textTT.setText("Second");
}
}, 1000);
}
答案3
得分: 0
你应该使用 Handler 来实现这个功能:
private void applicationTest() {
textTT.setText("First");
new Handler().postDelayed(new Runnable{
@Override
public void run() {
textTT.setText("Second");
}
}, 1000);
}
英文:
You should use Handler to achieve that:
private void applicationTest() {
textTT.setText("First");
new Handler().postDelayed(new Runnable{
@Override
public void run() {
textTT.setText("Second");
}
},1000)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论