В нашем личном 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...
}
Что-то не так? Спасибо!