0

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 を通じてのみトリガーされますか?

4

1 に答える 1