我正在制作简单的测验应用,现在等待时出现问题。 当用户单击四个可能答案中的一个时,它应该变为橙色,并在两秒后变为红色或绿色(正确或错误的答案)。这是我的代码的一部分:
public void clickButton(View v) {
changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
try {
//Thread.sleep(2000);
TimeUnit.SECONDS.sleep(2);
} catch ( InterruptedException r ) {}
changeButton(v, getResources().getDrawable(R.drawable.btn_red));
}
我试过线程睡眠或时间单位睡眠,但在这两种情况下,按钮都变为默认白色"点击"相位和两秒后红色 - 完全跳过橙色部分。我检查了其他颜色,因此在那些颜色的xml文件中定义没有问题。问题可能在那个睡眠的某个地方,但我不知道我应该用什么来延迟红色,仍然是橙色。 请求建议
答案 0 :(得分:1)
@panini是对的,你应该在主线程上睡觉,改用另一个线程,尝试这样的事情,没有经过测试,所以我不知道它是否会起作用但是一个想法:
public void clickButton(final View v) {
changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
v.postDelayed(new Runnable() {
@Override
public void run() {
changeButton(v, getResources().getDrawable(R.drawable.btn_red));
}
}, 2000);
}
也许您需要强制线程在UI中运行,无论如何都要尝试。如果这不起作用,您可以始终使用AsyncClass。希望它有所帮助。
答案 1 :(得分:1)
将延迟Runnables
发布到UI线程的一种简单方法是将消息传递给UI线程的Handler
。
例如:
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
}}, 2000);