Runnable 方法在运行一次后停止
Runnable method stops after one time
我构建了一个小应用程序,你可以写几秒,然后有一个计时器。当计时器达到 0 时,它会播放音乐。
不幸的是 Runnable
在一个减法之后停止(我的意思是在我写了 5 并按下按钮之后 5 减去 4 然后停止。)
我不能将 Runnable
写在 onClick
之外,因为我需要它仅在用户单击“开始”按钮后才会 运行。
我怎样才能做到这一点?
这是我的代码:
public void onClick(View v) {
// btnPlant.setEnabled(false);
handler = new Handler();
while(count >0) {
final Runnable r = new Runnable() {
public void run() {
count = Integer.parseInt(etInput.getText().toString());
count--;
timer.setText(Integer.toString(count));
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
}
}
我移线解决了问题
count = Integer.parseInt(etInput.getText().toString());
在 Runnable 之外,因为问题是我总是将不变的 edittext 值传递给计数,例如 5 。
之后我从 5 中减去 1 所以它是 4 并打印。
再次将值 5 发送给它,它一次又一次地变成 4.. 所以:
public void onClick(View v) {
// btnPlant.setEnabled(false);
handler = new Handler();
count = Integer.parseInt(etInput.getText().toString());
Runnable r = new Runnable() {
public void run() {
count--;
timer.setText(Integer.toString(count));
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
}
我构建了一个小应用程序,你可以写几秒,然后有一个计时器。当计时器达到 0 时,它会播放音乐。
不幸的是 Runnable
在一个减法之后停止(我的意思是在我写了 5 并按下按钮之后 5 减去 4 然后停止。)
我不能将 Runnable
写在 onClick
之外,因为我需要它仅在用户单击“开始”按钮后才会 运行。
我怎样才能做到这一点?
这是我的代码:
public void onClick(View v) {
// btnPlant.setEnabled(false);
handler = new Handler();
while(count >0) {
final Runnable r = new Runnable() {
public void run() {
count = Integer.parseInt(etInput.getText().toString());
count--;
timer.setText(Integer.toString(count));
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
}
}
我移线解决了问题
count = Integer.parseInt(etInput.getText().toString());
在 Runnable 之外,因为问题是我总是将不变的 edittext 值传递给计数,例如 5 。 之后我从 5 中减去 1 所以它是 4 并打印。 再次将值 5 发送给它,它一次又一次地变成 4.. 所以:
public void onClick(View v) {
// btnPlant.setEnabled(false);
handler = new Handler();
count = Integer.parseInt(etInput.getText().toString());
Runnable r = new Runnable() {
public void run() {
count--;
timer.setText(Integer.toString(count));
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
}