2016-12-22 10 views
0

尋求一些幫助。我在我的代碼中加入了一個Countup Timer函數。點擊一個按鈕,定時器啓動並顯示小時,分鐘,秒到textview。點擊按鈕計時器暫停。這個功能很好用,但是當我切換到橫向模式時,我無法讓textview繼續更新。我將定時器功能放入其自己的類中,並將其保存在宗地/包中。我可以從我的日誌中看到,這種轉換沒有問題,並繼續計數,但ontick函數中的Textview調用不再使用。以下是代碼。Android:切換到橫向模式時使用Onclick方法更新Textview

 @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main_page); 
       timerStart = (Button) findViewById(startTimer); 
       timerOutput = (TextView) findViewById(R.id.time); 
       runTimer = new CountUpTimer(1000) { 
       @Override 
       public void onTick(long elapsedTime) { 
        Log.i("elapsedtime", "yes"); 
        timerOutput.setText(runTimer.getelapsedTime()); 
        runTimer.stop(); 
       } 
      }; 
      View.OnClickListener TimerOnclickLisner = new View.OnClickListener() { 
       // Looks for user to click on the button to start the timer 
       @Override 
       public void onClick(View v) { 
        if (onOffTracker == true) { 
         runTimer.restart(); 
        } 
        else { 
         runTimer.stop(); 
        } 
        onOffTracker = !onOffTracker; 
       } 
      }; 
      timerStart.setOnClickListener(TimerOnclickLisner); 

      if (savedInstanceState != null) { 
       InitializeTimer = 
       onOffTracker = savedInstanceState.getBoolean(STATE_ONOFFTRACKER); 
       runTimer = new CountUpTimer(1000) { 
        @Override 
        public void onTick(long elapsedTime) { 
         timerOutput.setText(runTimer.getelapsedTime()); 
         runTimer.stop(); 
        } 
       }; 
       runTimer = savedInstanceState.getParcelable(STATE_COUNTERUP); 
       runTimer.restart(); 
      } 
     } 

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putBoolean(STATE_ONOFFTRACKER, onOffTracker); 
     outState.putParcelable(STATE_COUNTERUP, runTimer); 
     super.onSaveInstanceState(outState); 
    } 

我沒有包含CounterTimer類的代碼,因爲我知道這個工作正常。問題的確是如何讓textview在遭到破壞後對onclick做出響應,並在從縱向切換到橫向並重新切換時重置。當我把包裹拿回來時,我試着再次喚起了ontick功能。不起作用。我確實證實,櫃檯仍在工作。

代碼

+0

登錄'onOffTracker'。最好在監聽點擊textView的行之前添加日誌語句。什麼是價值,是真是假? – X09

回答

0

我認爲你需要實現這兩個方法如下。這些你可以做任何你想要定製的方向變化

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
} 
0

嘗試使用這樣的代碼:

if (savedInstanceState != null) { 
    InitializeTimer = 
    onOffTracker = savedInstanceState.getBoolean(STATE_ONOFFTRACKER); 
    runTimer = savedInstanceState.getParcelable(STATE_COUNTERUP); 
    runTimer.restart(); 
} 

,而不是這樣的:

if (savedInstanceState != null) { 
    InitializeTimer = 
    onOffTracker = savedInstanceState.getBoolean(STATE_ONOFFTRACKER); 
    runTimer = new CountUpTimer(1000) { 
     @Override 
     public void onTick(long elapsedTime) { 
      timerOutput.setText(runTimer.getelapsedTime()); 
      runTimer.stop(); 
     } 
    }; 
    runTimer = savedInstanceState.getParcelable(STATE_COUNTERUP); 
    runTimer.restart(); 
} 

提示: 這是更好地覆蓋此方法:

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    InitializeTimer = 
    onOffTracker = savedInstanceState.getBoolean(STATE_ONOFFTRACKER); 
    runTimer = new CountUpTimer(1000) { 
     @Override 
     public void onTick(long elapsedTime) { 
      timerOutput.setText(runTimer.getelapsedTime()); 
      runTimer.stop(); 
     } 
    }; 
    runTimer = savedInstanceState.getParcelable(STATE_COUNTERUP); 
    runTimer.restart(); 
} 

而不是使用if (savedInstanceState != null)聲明。

相關問題