1. ホーム
  2. android

バックスタックからフラグメントを削除する

2023-10-07 02:24:31

質問

タブレットを縦に持ったとき、アクティビティに 3 つのフラグメントがあります。しかし、横向きにすると、これらのフラグメントのうち2つしかありません。私が抱えている問題は、縦から横へ行くとき、アクティビティが3番目のフラグメントを作成することです。このフラグメントは作成できないので、エラーが表示されます。

私は、このフラグメントがバックスタックにあるために作成されていることを突き止めました。

onDestroyメソッドでフラグメントを削除するために

FragmentTransaction f = fragmentManager.beginTransaction();
f.remove(mf);
f.commit();

しかし、onSaveInstanceStateの後にこの関数を使用することはできないというエラーが発生します。

このフラグメントをバックスタックから取り出す正しい方法は何でしょうか。

更新

私が問題を抱えているフラグメントは、このライブラリの mapFragment であることを付け加えておく必要がありそうです。

https://github.com/petedoyle/android-support-v4-googlemaps

私の使い方はこんな感じです。

mf = MapFragment.newInstance(1, true);

ft = fragmentManager.beginTransaction();
ft.replace(R.id.mapContainer, mf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack("map");
ft.commit();

どのように解決するのですか?

バックステートに FragmentTransaction を使ってバックスタックに追加し、バックスタックから削除するには FragmentManager pop メソッドを使ってバックスタックから削除します。

FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(myFrag);
trans.commit();
manager.popBackStack();