私のTabhostのせいで、ライフサイクル機能が頼りになりませんでした。
私がしたことは、クロノメーターを中央クラスの静的グローバルにしontabchangedlistener
、タブホスト内に を追加して、変更先のタブがクロノメーターのあるタブであるかどうかを確認することでした。これが true の場合、クロノメーターの現在時刻の Long 値が格納されます。
tabHost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String arg0) {
// TODO Auto-generated method stub
if(arg0.contentEquals("homeGroup"))
{
//store time in centralhelper.java
//stopWatch is of type Chronometer
//stopWatchLastTime is of type Long and is initially set to zero. Chronometer uses milliseconds to determine time, will never be zero after set
CentralHelper.stopWatchLastTime = CentralHelper.stopWatch.getBase();
}
}
});
私の homeGroup ビューが読み込まれると、onResume() 関数が呼び出されます。ここには、クロノメーターがカウントを再開する時間を取得するための条件があります。タブホストは通常のライフサイクル関数以外のすべてのロードで onPause() と onResume() の両方を呼び出すという事実にもかかわらず、それらはまだ onCreate() の前に呼び出されます。
public void onResume(){
super.onResume();
//update Chronometer with time stored in tabchangelistener
if(CentralHelper.stopWatchLastTime!=0)
CentralHelper.stopWatch.setBase(CentralHelper.stopWatchLastTime);
}
これにより、 onCreate() で同様のチェックを行うことができました
if(CentralHelper.stopWatchLastTime!=0)
{
CentralHelper.stopWatch.start(); //this is where it resumes counting from the base set in onResume()
}
else
{
CentralHelper.stopWatch.start();
CentralHelper.stopWatch.setBase(SystemClock.elapsedRealtime());
}