Я использую этот метод в своем контейнере Activity, чтобы показать 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();
}
Я вызываю его из своего контейнера Activity; в первый раз:
- попадает в оператор else, а mBFrag заменяет mAFrag.
Затем нажимаю кнопку возврата:
- и операция выполняется в обратном порядке (отображается mAFrag, но .. удаляется ли mBFrag?).
Затем я снова иду вперед, вызывая showBFrag () из того же Activity:
- и он СНОВА попадает в оператор else. (так что я могу сделать вывод, что mBFrag НЕ ДОБАВЛЯЕТСЯ)
- но у меня есть фрагмент, который уже добавлен IllegalStateException ... (так почему он не попал в оператор if вместо этого?)
So:
- Почему метод isAdded () не возвращает TRUE, если я получаю уже добавленный фрагмент IllegalStateException?
- Удаляет ли операция 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);"