for(int i = 0; i <= lvl-1; ++i) {
id = sequence.get(i);
switch(id) {
case 1:
sq1.setBackgroundResource(R.drawable.square_show);
hnd.postDelayed(new Runnable() {
public void run() {
sq1.setBackgroundResource(R.drawable.square);
}
}, 2000);
break;
case 2:
sq2.setBackgroundResource(R.drawable.square_show);
hnd.postDelayed(new Runnable() {
public void run() {
sq2.setBackgroundResource(R.drawable.square);
}
}, 2000);
break;
case 3: ...
你知道为什么当这个cicle通过时,每个案例都是真的吗? 好像var“id”是1,2,3和4和5以及其他每个
代码不会在每个循环之间等待2秒,但在第一个循环中将它们设为true
答案 0 :(得分:3)
好的,我看到这引起了很多关注。正如JustWork所说你正在执行循环并且所有的情况都是立即处理的,你只需要创建N个线程,等待2秒然后再进行。正如我所说,你可以通过在延迟时间后添加2000 * i来应用简单的黑客攻击。喜欢这个
case 1:
sq1.setBackgroundResource(R.drawable.square_show);
hnd.postDelayed(new Runnable() {
public void run() {
sq1.setBackgroundResource(R.drawable.square);
}
}, 2000 * (i + 1));
这意味着您将立即创建所有线程,并且每个线程将在显示之前等待2秒。 i + 1是i为零的时间。
希望这有助于并享受您的工作。
答案 1 :(得分:1)
postDelayed是一个异步调用。或者你把一个线程睡眠,或者你实现一个通知并等待响应,或者你增加每个循环的延迟,如
int delay = 0;
for(int i = 0; i <= lvl-1; ++i) {
id = sequence.get(i);
delay += 2000;
switch(id) {
case 1:
sq1.setBackgroundResource(R.drawable.square_show);
hnd.postDelayed(new Runnable() {
public void run() {
sq1.setBackgroundResource(R.drawable.square);
}
}, delay);
break;
case 2:
sq2.setBackgroundResource(R.drawable.square_show);
hnd.postDelayed(new Runnable() {
public void run() {
sq2.setBackgroundResource(R.drawable.square);
}
}, delay);
break;
case 3: ...
但最好的解决方案是实现通知处理程序。
答案 2 :(得分:0)
我认为id和lvl变量的声明和值存在一些问题。请在调试模式下检查它们的值。
答案 3 :(得分:0)
因为您正在循环,请考虑以下事项:
for(int i = 0; i <= lvl-1; ++i) {
id = sequence.get(i); // this probably returns i
switch(id) {
case 1:
// this will execute during the *first* iteration of the for loop
case 2:
// this will execute during the *second* iteration of the for loop
...
}
}
这是我最好的猜测,但无法看到其余的代码。
答案 4 :(得分:0)
我建议如果你想延迟你的循环,你必须使用Thread.sleep(2000);
但你也必须使用Async
调用for循环。这将使您无法锁定UI线程。
答案 5 :(得分:0)
代码不应该等待。延迟Runnable
的执行应该等待。 for/switch
中的代码只是以最大速度继续运行。
但为什么要切换呢?如果你有一个数组T[] sq = {sq1, sq2, ...};
,你可以使用sq[sequence.get(i)].setBackgroundResource(R.drawable.square_show)
等,并完全取消开关。