2015-07-06 3 views
0

Я столкнулся с приложением с одним activity и всей навигацией на основе Fragment s. У меня есть одно место, содержащее следующие шаги:Странные фрагменты поведения задней стопы

фрагмент1 заменен в контейнере id1; Я использую add для добавления фрагмента2 в тот же контейнер id1; после использования replace для добавления фрагмента 3 в тот же контейнер id1;

Это три незащищенных транзакции. Все они добавляются в задний стек. Но когда я нажимаю назад, после последнего, фрагмент2 не появляется, я вижу только fragmtent1 на контейнере id1, но фрагмент2 находится в обратном стеке, потому что следующая нажатие назад кнопки не имеет эффекта, фрагмент1 все еще видимый, после следующего нажатия кнопки фрагмент1 будет удален из контейнера.

Похоже, что после первого нажатия кнопки фрагмент2 не создает своего вида, и поэтому он исчезает на контейнере.

Существует часть кода я использовал для замены:

FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(R.id.kp_content_frame, fragment); 

    if (addToBackStack) { 
     transaction.addToBackStack(fragment.getTag()); 
    } 
    if (allowingStateLoss) { 
     transaction.commitAllowingStateLoss(); 
    } else { 
     transaction.commit(); 
    } 

Для дополнения:

final String tagToAdd = fragment instanceof BaseFragment ? ((BaseFragment) fragment).getCustomTag() : fragment.toString(); 

     if(isDuplicateFragment(tagToAdd)) { 
      return; 
     } 

     FragmentTransaction transaction = fragmentManager.beginTransaction(); 

     if (enterPopAnim != 0 || exitPopAnim != 0) { 
      transaction.setCustomAnimations(enterAnim, exitAnim, enterPopAnim, exitPopAnim); 
     } else if(enterAnim != 0 || exitAnim != 0) { 
      transaction.setCustomAnimations(enterAnim, exitAnim); 
     } 

     transaction.add(R.id.kp_content_frame, fragment, tagToAdd); 

     if (addToBackStack) { 
      transaction.addToBackStack(tagToAdd); 
     } 
     transaction.commit(); 

Есть идеи? Благодарю.

ответ

1

Но когда я нажимаю назад, после того, как в последний раз, FRAGMENT2 не появляется

Потому что у вас есть два фрагмента в контейнере id1. А фрагмент1 выше фрагмента2.

Я вижу только fragmtent1 на контейнер id1, но FRAGMENT2 находится в задней стеке, потому что в следующем нажатии кнопка назад не имеет никакого эффекта fragment1 еще виден,

Из следующего нажатия кнопки назад удалило FRAGMENT2, которые являются невидимыми ,

Простое решение: не смешивайте add и replace сделки. Используйте replace всюду.

 Смежные вопросы

  • Нет связанных вопросов^_^