2017-10-13 43 views
0

嘗試實現應該顯示在按鈕上的CountDownTimer。只要我不轉動智能手機,它就可以正常工作。打開智能手機後,按鈕僅顯示初始值文本,即使牛仔時尚仍在運行。有人知道爲什麼在打開智能手機後,myButton.setText()方法在onTick()方法中不起作用嗎?爲什麼在打開smarphone並使用CountDownTimer後不能在按鈕上繪製文本?

public class MainActivity extends AppCompatActivity { 

    private TextView mTextMessage; 
    private TextView myTextView; 
    private Button myButton; 
    private CountDownTimer countDownTimer; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mTextMessage = (TextView) findViewById(R.id.message); 
     myTextView= (TextView) findViewById(R.id.textView); 
     myButton= (Button) findViewById(R.id.button); 
     myTextView.setText("Set new text"); 
     myButton.setText("Set Button text"); 
     myButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       myButton.setText("Button clicked"); 
       countDownTimer = new CountDownTimer(60 * 1000, 1000) { 
        @Override 
        public void onTick(long millisUntilFinished) { 
     //After turning the Smartphone the follow both methods do not work anymore 
         myButton.setText("Calc: " + millisUntilFinished/1000); 
         myTextView.setText("Calc: " + millisUntilFinished/1000); 
        } 
        @Override 
        public void onFinish() { 
        } 
       }; 
       //timer started 
       countDownTimer.start(); 
      } 
     }); 
    } 
} 
+0

請檢查onFinish是否在您打開設備。 – AndroidStorm

+0

開啓智能手機後不會調用完成。我也可以連接調試器,看到轉動後計時器仍然運行。但myButton.setText(「Calc:」+ millisUntilFinished/1000); 方法不顯示值。 –

+0

一般來說,我不認爲你會對這段代碼感到滿意。例如:你有沒有看到當你點擊按鈕第二次或第三次可以說在初始敲擊後5秒鐘後會發生什麼? – Barns

回答

0

這裏是我的代碼示例... 請注意,我說的「DONE」文本在onFinish()方法,這樣你就可以設置文字爲你希望所有的UI組件......而且我在應用程序在後臺運行的情況下添加if語句,以防在應用程序在後臺運行之前保存一些信息

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 

    myButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myButton.setText("Button clicked"); 
      countDownTimer = new CountDownTimer(3000, 1000) { 
       @Override 
       public void onTick(long millisUntilFinished) { 
        //After turning the Smartphone the follow both methods do not work anymore 
        if (!runningBackground) { 
         myButton.setText("Calc: " + millisUntilFinished/1000); 
         myTextView.setText("Calc: " + millisUntilFinished/1000); 
        } else { 
         //Do something 
        } 
       } 
       @Override 
       public void onFinish() { 
        if (!runningBackground) { 
         //Do something 
        } 
        mTextMessage.setText("DONE"); 
        runningBackground = false; 
        running = false; 
       } 
      }; 
      //timer started 
      countDownTimer.start(); 
      running = true; 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    runningBackground = false; 
} 

@Override 
protected void onPause() { 
    runningBackground = true; 
    super.onPause(); 
} 
相關問題