Обработчик Android не повторяется

#android #handler

Вопрос:

Я пытаюсь использовать «обработчик» для повторения функции (действительно пытаюсь научиться ее использовать), но функция выполняется только один раз.

 public Runnable runnableCode = new Runnable() {
        @Override
        public void run() {

            if (changeColor) {
                myPaint.setColor(Color.BLUE);
                Rect r = new Rect(0, 0, widthInPixels * 90, heightInPixels * 90);
                myCanvas.drawRect(r, myPaint);
                changeColor = false;
            } else {
                myPaint.setColor(Color.RED);
                Rect r = new Rect(0, 0, widthInPixels * 90, heightInPixels * 90);
                myCanvas.drawRect(r, myPaint);
                changeColor = true;
            }
            handler.postDelayed(runnableCode, 1000);
        }

    };


    public void play (View view) {
       handler.post(runnableCode);
    }
 

Ответ №1:

Вы должны loop через свое handler повториться. Но вы звоните только один раз.

Попробуйте этот код ниже:

 final Handler handler = new Handler(); 
int count = 0; //keep track of count

final Runnable runnable = new Runnable() {
    public void run() { 
        if (count   < 5) { //how many times do you want to repeat?
            handler.postDelayed(this, 5000); //repeat handler
        }
    } 
}; 

//initial trigger
handler.post(runnable);
 

Дайте мне знать, если у вас возникнут какие-либо вопросы. Спасибо.

Комментарии:

1. По-прежнему никакого повторения. Кроме того, должен ли он быть конечным циклом? Неужели этого не может быть, пока я не решу это прекратить?

Ответ №2:

Убедитесь, что ваш bool changeColor изменяется, сделав его последним массивом из одного элемента

Попробуйте код ниже:

 final Handler handler = new Handler();
final boolean[] changeColor = {false};
Runnable runnableCode = new Runnable() {
    @Override
    public void run() {

        if (changeColor[0]) {
            // code here
            changeColor[0] = false;
        } else {
            // other code here
            changeColor[0] = true;
        }
        messageHandler.postDelayed(this, 1000);
    }

};
handler.post(runnableCode);
 

Комментарии:

1. Нет, это все еще не меняется.

Ответ №3:

Я попытался добавить «тост», и это действительно повторяется; по какой-то причине проблема в рисунке.

Ответ №4:

Я попытался запустить функцию с кнопки, и похоже, что повторения накапливаются, а затем срабатывают все сразу, когда я снова нажимаю на кнопку.

Ответ №5:

Все еще борюсь с этим. Я также попробовал таймер, thread.sleep и планировщик ThreadPoolExecutor, и ничего.

Комментарии:

1. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.

2. На самом деле это не решение; я не могу заставить это работать.

3. Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под их постом.