Я столкнулся с приложением с одним 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();
Есть идеи? Благодарю.