Навигация по фрагментам Android, возвращаясь к определенным фрагментам в backstack - PullRequest
0 голосов
/ 30 сентября 2019

В нашем личном API у нас есть возможность анализировать дерево папок (не то, что на устройстве, а то, которое мы получили от веб-службы). Итак, мы отображаем каждый уровень папки и ее содержимое во фрагменте. Затем, если пользователь выбирает папку, мы показываем тот же фрагмент с другим контентом. Давайте назовем этот фрагмент BrowseFragment.

Мы пытаемся вернуться в дерево папок на определенном уровне. Например, с уровня 5 до уровня 2, и это не работает: иногда получается пустой экран, иногда неправильный экран. Однако обратный стэк выглядит нормально, потому что, когда пользователь возвращается на один уровень выше с помощью кнопки возврата Android, все в порядке.

Итак, вот наш обратный стэк после нескольких нажатий:

browseFragment #1

browseFragment # 4

browseFragment # 14

browseFragment # 47

browseFragment # 72

Вот как мызамените фрагмент:

public void onSelectFolder(Folder folderSelected) {

    // Getting transaction
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    BrowseFragment browseFragment = new BrowseFragment();

    // Adding bundle
    Bundle bundle = new Bundle();
    bundle.putSerializable(Constants.FRAGMENT_ARG_BROWSED_FOLDER_TREE, (Serializable)this.foldersBrowsed);
    browseFragment.setArguments(bundle);

    // Replacing fragment
    ft.replace(R.id.fragment_container, browseFragment, Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder());
    ft.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_left);
    ft.addToBackStack(Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder()); // Example: "browseFragment#1", "browseFragment#12" etc...
    ft.commit();
}

А вот как мы возвращаемся к определенному уровню:

public void onSelectFolderFromBreadCrumb(Folder folderSelected) {

    // Going back in the backstack
    getSupportFragmentManager().popBackStack(Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder(), 0); // Example: "browseFragment#1", "browseFragment#12" etc...
}

Что-то не так? Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2019

попробуйте getSupportFragmentManager().popBackStack(Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder(), POP_BACK_STACK_INCLUSIVE); У меня возникла проблема, подобная вашей, и мне удалось ее решить после прочтения этого сообщения в блоге

...