2014-10-31 8 views
3

Привет, я работаю над обратным отсчетом. Здесь, когда я нажимаю кнопку запуска, начнется обратный отсчет. а также прекратить его работу, но мне нужно реализовать метод паузы и возобновления во время таймера обратного отсчета. обратный отсчет перейдет в состояние паузы, когда я нажимаю кнопку паузы. обратный отсчет начнется с значения паузы, когда я нажму кнопку «Пуск». например: мой обратный отсчет от 0 до 30, предположим, что если я нажму кнопку паузы, значение будет приостановлено: 25 или 15 что-то еще. обратный отсчет начнется с 25, когда я нажму кнопку «Пуск». я надеюсь, что вы все поняли мою проблему я пытался, но я не получаю никакого решения не могли бы вы помочь мнекак реализовать метод приостановки и возобновления в countdowntimer

public class MainActivity extends ActionBarActivity implements OnClickListener { 

    private CountDownTimer countDownTimer; 
    private boolean timerHasStarted = false; 
    private Button startB; 
    public TextView text; 
    private final long startTime = 30 * 1000; 
    private final long interval = 1 * 1000; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    startB = (Button) this.findViewById(R.id.button); 
    startB.setOnClickListener((OnClickListener) this); 
    text = (TextView) this.findViewById(R.id.timer); 
    countDownTimer = new MyCountDownTimer(startTime, interval); 
    text.setText(text.getText() + String.valueOf(startTime/1000)); 
    } 

    public void onClick(View v) { 
    if (!timerHasStarted) { 
     countDownTimer.start(); 
     timerHasStarted = true; 
     startB.setText("STOP"); 
     } else { 
     countDownTimer.cancel(); 
     timerHasStarted = false; 
     startB.setText("RESTART"); 
    } 
    } 
public class MyCountDownTimer extends CountDownTimer { 
    public MyCountDownTimer(long startTime, long interval) { 
        super(startTime, interval); 
    } 

    @Override 
    public void onFinish() { 
    //text.setText("Time's up!"); 
     countDownTimer.start(); 
    } 

    @Override 
     public void onTick(long millisUntilFinished) { 
     text.setText("" + millisUntilFinished/1000); 
     } 
     } 
    } 


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/rl" > 

    <TextView 
    android:id="@+id/timer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:paddingRight="10dip" 
    android:textSize="50dp" /> 

    <Button 
    android:id="@+id/button" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:text="Start" /> 

</RelativeLayout> 
+0

Не могли бы вы добавить свой файл макета? –

+0

@ Gaëtan Maisse i обновил мой xml-файл, проверьте его – rizwan

ответ

1

Единственный способ я вижу, чтобы отменить таймер, когда вы вызываете паузу и создать новый, если вы хотите возобновите его, что-то вроде этого:

public class MainActivity extends ActionBarActivity implements OnClickListener { 

private MyCountDownTimer countDownTimer; 
private boolean timerHasStarted = false; 
private Button startB; 
public TextView text; 
private final long startTime = 30 * 1000; 
private final long interval = 1 * 1000; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    startB = (Button) this.findViewById(R.id.button); 
    startB.setOnClickListener(this); 

    text = (TextView) this.findViewById(R.id.timer); 
    countDownTimer = new MyCountDownTimer(startTime, interval,text); 
    // Set starting value 
    text.setText(text.getText() + String.valueOf(startTime/1000)); 
} 

public void onClick(View v) { 
    if (!timerHasStarted) { 
     // Start or resume counter 
     countDownTimer = countDownTimer.resume(); 
     timerHasStarted = true; 
     startB.setText("PAUSE"); 
     } else { 
     // Pause counter 
     countDownTimer.pause(); 
     timerHasStarted = false; 
     startB.setText("RESTART"); 
     } 
} 

public class MyCountDownTimer extends CountDownTimer 
{ 

    private long mRemainingTime = 0; 
    private long mInterval = 0; 
    private TextView mtvxToUpdate = null 

    // Use a textview reference to update text on each tick() 
    public MyCountDownTimer(long startTime, long interval,TextView txv) { 
     super(startTime, interval); 
     this.mInterval = interval; 
     this.mRemainingTime = startTime; 
     this.mtvxToUpdate = txv; 
    } 

    @Override 
    public void onFinish() { 
     mtvxToUpdate.setText("Time's up!"); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
      mRemainingTime = millisUntilFinished;   
      mtvxToUpdate.setText("" + millisUntilFinished/1000); 
    } 


    public void pause(){ 
     // Stop current timer 
     this.cancel(); 
    } 

    public MyCountDownTimer resume(){ 
     // Create a counter with last saved data (just before pause) 
     MyCountDownTimer newTimer = new MyCountDownTimer(mRemainingTime,mInterval,mtvxToUpdate); 
     // Start this new timer that start where old one stop 
     newTimer.start(); 
     // Return this new timer 
     return newTimer; 
    } 
} 
} 
+0

, когда я нажимаю кнопку паузы, номер должен остановиться, когда я нажимаю кнопку запуска, номер должен начинаться с значения паузы, можете ли вы объяснить мне, что именно мне делать, и где у меня есть использовать ваш предложенный код и рассказать мне, как реализовать метод click также – rizwan

+0

@rizwan Я обновляю свой ответ, чтобы быть более полным –

+0

@ Gaëtan Maisse, если я использую как this countDownTimer.resume(); а также countDownTimer.pause(); я получаю эту ошибку «Метод resume(), pause() не определен для типа CountDownTimer« Могу ли я использовать ((MyCountDownTimer) countDownTimer) .pause(); например, вместо countDownTimer.pause(); – rizwan