FragmentTabHost を持つ Fragment アクティビティがあります。次のコードを使用して、フラグメントをタブに追加します。
mTabHost.addTab(mTabHost.newTabSpec(tab1Name).setIndicator(tabIndicator1),
EventSettingsStep1Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec(tab2Name).setIndicator(tabIndicator2),
EventSettingsStep2Fragment.class, null);
別のタブに切り替えたときに、すべての値 (ビュー ステートなど) を保持して、タブに戻ったときに同じデータを保持したいと考えています。
私は onSaveInstanceState メソッドをオーバーライドしました & そこに、保持したい値をバンドルに追加しました。
呼び出されるメソッドを実行したところ、次のようになりました。
Tab1 から Tab2 への切り替え: Tab1:onPause、Tab2:onCreateView、Tab2:onResume
Tab2 から Tab1 への切り替え: Tab2:onPause、Tab1:onCreateView、Tab1:onResume
onSaveInstanceState が呼び出されていません。
私のフラグメントの1つのコードは次のとおりです。
public class EventSettingsStep1Fragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
if (savedInstanceState != null) {
Log.d(TAG, "restoring onSavedInstanceState");
Gson gson = new Gson();
event = gson.fromJson(savedInstanceState.getString("event"), Event.class);
}
if (event != null) {
//set views
}
return v;
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.d(TAG, "onSaveInstanceState");
super.onSaveInstanceState(outState);
Gson gson = new Gson();
outState.putString("event", gson.toJson(event));
}
}
onSaveInstanceState が呼び出されないのはなぜですか? FragmentActivity を通じてのみトリガーされますか?