3

私はこのようなカウントダウンタイマーを使用しました

new CountDownTimer(15000, 15) {

             public void onTick(long millisUntilFinished) {

                 long seconds=millisUntilFinished/1000;
                 long min=millisUntilFinished%100;

                 timeleft=(int) (seconds*1000+min);
                 if(millisUntilFinished>=10000)
                 {
                     changeText.setTextColor(Color.GREEN);
                 }
                 else if(millisUntilFinished>=5000)
                 {
                     changeText.setTextColor(Color.MAGENTA); 
                 }
                 else
                 {
                     changeText.setTextColor(Color.RED);

                 }
                 changeText.setText(String.format("%02d", seconds )+ "."+String.format("%02d", min )+" sec");

             }

             public void onFinish() {

                 timeleft=0;
                 missed++;
                  nametext.setTextColor(Color.RED);
                 nametext.setText("Time Up!");
                      bottombutton.setVisibility(View.INVISIBLE);   
                    globalflag=13;
                changeText.setTextColor(Color.RED);
                changeText.setText("0.00 Sec");
                    Handler myHandler = new Handler();
                    myHandler.postDelayed(mMyRunnablecif, 3000);



             }
          }.start(); 

ボタンをクリックcancel()すると、電話をかけましたが、しばらくカウントを停止してから、を呼び出しますonFinish()onFinish()呼び出した後に呼び出す必要はありませんcancel()。これに対する解決策はありますか?どんな助けでも大歓迎です。

4

3 に答える 3

3

セット内onClickでブール値(たとえばbuttonPressed)をtrueに設定します。

チェックでは、onFinishこのブール値:

if (buttonPressed == true)
{
    //do nothing
}
else
{
    //run code
}
于 2012-06-07T07:04:41.400 に答える
2

代わりにタイマーを使用して、次のようなことを行うことができます。

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {
        // do your updates here
        mUpdateTimeHandler.postDelayed(this, 1000);
    }
};

Handler mUpdateTimeHandler = new Handler();
mUpdateTimeHandler.postDelayed(mUpdateTimeTask, 100);

タスクをキャンセルする場合:

mUpdateTimeHandler.removeCallbacks(mUpdateTimeTask);
于 2012-06-07T07:37:11.173 に答える
0

また、cancel()を呼び出してもonFinishが呼び出される理由もわかりません。これに対する唯一の回避策は、NPEを防ぐために、onFinishで呼び出しをnullチェックすることだと思います。

public void onFinish() {
   if (nametext == null || bottombutton == null || changeText == null || ... ) {
      return;
   }
...
于 2020-03-19T05:15:13.870 に答える