postDelayed OnClickListener не работает
Я пытаюсь реализовать задержку при нажатии кнопки, каждую секунду мне нужно удалить один элемент из списка с именем solved_cells
, список изначально состоит из 16 пунктов. ниже то, что я сделал:
solve_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
while (solved_cells.size()>=1) {
v.postDelayed(new Runnable() {
@Override
public void run() {
//Execute code here
solved_cells.remove(solved_cells.size() - 1);
}
}, 1000L);
}
}
});
но каждый раз, когда я отлаживаю, я вижу, что код достигает:
v.postDelayed(new Runnable() {
и не касается public void run() {
Функция, Ваши предложения высоко ценятся.
1 ответ
Решение
Я не знаю точно, в чем ваша проблема в вашем коде, но вместо этого вы можете использовать таймер, создав класс TimerTask
Timer timer;
MyTimerTask timerTask;
private class MyTimerTask extends TimerTask {
@Override
public void run() {
try {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (solved_cells.size() > 0) {
solved_cells.remove(solved_cells.size() - 1);
} else {
timer.cancel();
timer.purge();
}
}
});
} catch (Exception e) {
// e.printStackTrace();
}
}
}
и в вашем слушателе вы можете объявить это так
solve_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timerTask = new MyTimerTask();
Timer t = new Timer();
t.schedule(timerTask , 1000L);
}
});