フラグメントがあります。
MyFragment myFrag = new MyFragment();
このフラグメントにバンドル データを配置します。
Bundle bundle = new Bundle();
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
次に、古いフラグメントをこれに置き換えて、バックスタックに置きます。
//replace old fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFrag, "MyTag");
//put on backstack
fragmentTransaction.addToBackStack(null);
//commit & get transaction ID
int transId = fragmentTransaction.commit();
後で、上記のトランザクション ID( )を使用してバックスタックをポップします。transId
//pop the transaction from backstack
fragmentManager.popBackStack(transId,FragmentManager.POP_BACK_STACK_INCLUSIVE);
後で、再度 fragment( )の引数としてバンドル データを設定します。myFrag
//Got Java.lang.IllegalStateException: fragment already active
myFrag.setArguments(bundle);
ご覧のとおり、上記のコードで例外が発生しJava.lang.IllegalStateException: fragment already active
ました。バックスタックからトランザクションをポップしたのに、なぜまだアクティブなのかわかりません。 、とにかく、例外を受け取ったので、フラグメントを無効にするしかないと思ったので、次のようにしました。myFrag
Fragment activeFragment = fragMgr.findFragmentByTag("MyTag");
fragmentTransaction.remove(activeFragment);
フラグメントを非アクティブ化する方法が見つからなかったため、上記のコードが本当にフラグメントを非アクティブ化できるかどうかはわかりません。:(
その後、myFrag
再度バンドル データをフラグメントに設定しようとすると、同じエラーが発生します。
Java.lang.IllegalStateException: fragment already active
フラグメントを削除しても、まだアクティブなようです...なぜですか? フラグメントを非アクティブ化するには?