2014-01-30 2 views
0

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

Вот ListView OnClick для таймеров

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(); 
      } 
+0

Вы пытаетесь вызвать mCountDown.cancel() перед началом нового ? – Dimmerg

+0

вы имеете в виду вот так? else if (position == 1) {mCountDown.cancel(); mCountDown = new CountDownTimer ((600 * 1000), 1000) { public void onTick (long millisUntilFinished) {@Dimmerg – user3224105

+0

Да, это не работает? – Dimmerg

ответ

0

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

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

         public void onTick(long millisUntilFinished) { 
          mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
         } 
Смежные вопросы