Я вызываю этот метод для перехода от AFrag к BFrag:
showFragment()
{
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
// Add fragment to the container ContentView
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
// Add FADE effect
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Он показывает новый фрагмент (BFrag), заменяет предыдущий (AFrag) и сохраняет информацию о транзакции, чтобы ее можно было автоматически отменить/отменить при нажатии кнопки «Назад».
При нажатии кнопки назад все выглядит нормально, показывается предыдущий фрагмент (AFrag). Но когда я снова иду вперед (AFrag -> BFrag), я получаю исключение «Фрагмент уже добавлен».
Разве обратная/отмененная операция не удалила новый фрагмент (BFrag)? Это ожидаемое поведение?
Странно, потому что после этого я решил поставить галочку:
if(mBFrag.isAdded())
{
fragmentTransaction.show(mBFrag);
}
else
{
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
}
и все еще, он попадает в оператор else... и я получаю исключение.
Любое понимание того, что я делаю неправильно, пожалуйста?
Спасибо.