Остановка таймеров обратного отсчета для новых

Итак, прямо сейчас у меня есть список, в котором настроен таймер обратного отсчета, но если я нажму 2 элемента, он начнет показывать обратный отсчет 2 элементов, как я могу настроить его так, чтобы каждый раз, когда щелкается другая позиция в списке, он останавливал старый обратный отсчет для нового? Спасибо за помощь!

Вот список по щелчку для таймеров

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parentAdapter, View view, int position,long id) {

                final TextView mTextField = (TextView) findViewById(R.id.timerValue);

                if(position == 0) {      

                    mCountDown = new CountDownTimer((300 * 1000), 1000) {

                         public void onTick(long millisUntilFinished) {
                             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
                         }

                         public void onFinish() {
                             mTextField.setText("Session Completed!");
                             String path = "/sdcard/Music/ZenPing.mp3";
                            try {

                                mp.reset();
                                mp.setDataSource(path);
                                mp.prepare();
                                mp.start();

                            } catch (IOException e) {
                                Log.v(getString(R.string.app_name), e.getMessage());
                            }
                         }
                      }.start();

                } else if (position == 1) {
                    mCountDown = new CountDownTimer((600 * 1000), 1000) {

                         public void onTick(long millisUntilFinished) {
                             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
                         }

                         public void onFinish() {
                             mTextField.setText("Session Completed!");
                             String path = "/sdcard/Music/ZenPing.mp3";
                                try {

                                    mp.reset();
                                    mp.setDataSource(path);
                                    mp.prepare();
                                    mp.start();

                                } catch (IOException e) {
                                    Log.v(getString(R.string.app_name), e.getMessage());
                                }
                         }
                      }.start();
                } else if (position == 2) {
                    mCountDown = new CountDownTimer((900 * 1000), 1000) {

                         public void onTick(long millisUntilFinished) {
                             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
                         }

                         public void onFinish() {
                             mTextField.setText("Session Completed!");


     String path = "/sdcard/Music/ZenPing.mp3";
                            try {

                                mp.reset();
                                mp.setDataSource(path);
                                mp.prepare();
                                mp.start();

                            } catch (IOException e) {
                                Log.v(getString(R.string.app_name), e.getMessage());
                            }
                     }
                  }.start();
            }

person user3224105    schedule 30.01.2014    source источник
comment
Вы пытались вызвать mCountDown.cancel() перед запуском нового?   -  person Dimmerg    schedule 30.01.2014
comment
ты имеешь в виду вот так? иначе если (позиция == 1) { mCountDown.cancel(); mCountDown = new CountDownTimer((600 * 1000), 1000) { public void onTick(long millisUntilFinished) { @Dimmerg   -  person user3224105    schedule 30.01.2014
comment
Да, не работает?   -  person Dimmerg    schedule 30.01.2014
comment
Да, это так, если вы опубликуете как ответ, я могу отметить правильный @Dimmerg   -  person user3224105    schedule 30.01.2014


Ответы (1)


Попробуйте использовать mCountDown.cancel() перед запуском нового таймера:

if(position == 0) {      
                    mCoundDown.cancel();
                    mCountDown = new CountDownTimer((300 * 1000), 1000) {

                         public void onTick(long millisUntilFinished) {
                             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
                         }
person Dimmerg    schedule 31.01.2014