#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. Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под их постом.