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);

    }
});
Другие вопросы по тегам