コンテナーのアクティビティでこのメソッドを使用して、BFrag を表示します。
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
コンテナーのアクティビティから呼び出します。初めて:
- else ステートメントに入り、mBFrag が mAFrag を置き換えます。
次に、戻るボタンを押します。
- 操作が逆になります (mAFrag が表示されますが、mBFrag は削除されますか?)。
次に、同じアクティビティから showBFrag() を呼び出して、再び先に進みます。
- そして、else ステートメントに再び入ります。(したがって、mBFrag は追加されていないと推測できます)
- しかし、フラグメントが既に追加されている IllegalStateExceptionを取得しました...(では、代わりに if ステートメントに入らなかったのはなぜですか?)
そう:
- Fragment already added IllegalStateExceptionを取得している場合、isAdded() メソッドが TRUE を返さないのはなぜですか??
- popBackStack 操作は、以前に追加されたフラグメントを完全に削除しますか?
- 私が誤解している行動は何ですか?
編集:例外の完全な情報は次のとおりです。
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment already added: BFrag{40b28158 id=0x7f0c0085}
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:360)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:352)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at myPackageName.containerActivity.showBFrag() // This line: "fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);"