Я столкнулся с приложением с одним activity
и всей навигацией на основе Fragment
. У меня есть одно место, содержащее следующие шаги:
фрагмент1 заменен в контейнере id1; Я использую add
для добавления фрагмента2 в тот же контейнер id1; после того, как я использую replace
для добавления фрагмента3 в тот же контейнер id1;
Это три незащищенные транзакции. Все добавляются в задний стек. Но когда я нажимаю назад, после последнего фрагмент2 не появляется, я вижу только фрагмент1 на контейнере с идентификатором1, но фрагмент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();
Любые идеи? Спасибо.