Настройка: у меня есть 4 этапа, в которых я использую обработчик с отложенной задержкой, чтобы сделать паузу еще с двумя вложенными задержками.
Хронология:
stage1 | CODE FIRES |stage2 | КОДОВЫЕ ПОЖАРЫ |stage3 | КОДОВЫЕ ПОЖАРЫ |stage4
stage1: деактивирован, просто показывает настраиваемое оповещение.
stage2: деактивирован (в основном) с визуальными элементами для пользователя, включая обратный отсчет
stage3: деактивирован со вторым отсчетом времени
stage4: взаимодействие с пользователем, нет обратного отсчета или дополнительных пауз
Я хочу, чтобы пользователь мог переходить к концу stage2 при нажатии кнопки, что отменяет таймер обратного отсчета и задержку после задержки(без отмены кода, который он ожидает инициации)
Я пытался отменить оба и каждый по отдельности, но не удалось, вот команды, которые я использовал.
countdowntimer.cancel(); // this didn't work from the button or a void call
handler.removeCallbacks(runnable); // want to skip to end of stage2
Я видел несколько ссылок на try / catch, или, возможно, использовал поток в поисках, но не знал, как его использовать, или если это уместно.
Спасибо за любой ввод.
** Редактировать для ссылки на нерабочий код: * Я вырезал большую часть несвязанных вещей, не уверен, убил ли я их} или;экстра
public class Main extends Activity {
public Boolean onOffCDT = true;
public Handler handler2Mem;
public Runnable mem2Runnable = null;
public CountDownTimer aCounter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
aCounter = null;
final Handler handlerMem = new Handler();
final Runnable memRunnable = new Runnable() {
public void run() {
//code
final CountDownTimer aCounter = new CountDownTimer(memTime, 100) {
public void onTick(long millisUntilFinished) {
//update time
if(onOffCDT.equals(false)) {
onOffCDT = true;
// aCounter.cancel();
}
}
public void onFinish() {
title.setText(tempTitle);
}
};
aCounter.start();
Handler handler2Mem = new Handler();
Runnable mem2Runnable = new Runnable() {
public void run() {
//code
CountDownTimer bCounter = new CountDownTimer(8000, 100) {
public void onTick(long millisUntilFinished) {
//update time
}
public void onFinish() {
title.setText(tempTitle);
}
};
bCounter.start();
stage3(8000); //another delay
};
}; handler2Mem.postDelayed(mem2Runnable, memTime);
}
}; handlerMem.postDelayed(memRunnable, 2500);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// this button checks stage#, if stage4 info - else...
}else{
aCounter.cancel();
onOffCDT = false;
cancelCountDown(mem2Runnable, handler2Mem);
}
}
});
}
private void stage3 (Integer tTime) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
//Do Stuff
}
}, tTime);
}
public void cancelCountDown(Runnable run2, Handler hand2) {
hand2.removeCallbacks(run2);
}