Поведение фрагментов: FragmentTransaction :: replace () и обратная операция backStack

Я вызываю этот метод для перехода от 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());
 }

и все еще, он попадает в другой оператор ... и я получаю исключение.

Пожалуйста, поймите, что я делаю не так?

Thx.

5
задан Axel M. Garcia 6 June 2011 в 08:17
поделиться