在我们的个人API中,我们可以解析文件夹树(不是设备中的文件夹树,而是我们从Web服务中获得的文件夹树(。因此,我们将显示每个文件夹级别及其内容在片段中。然后,如果用户选择一个文件夹,我们将显示相同的片段,其中包含另一个内容。 让我们称这个片段为BrowseFragment
.
我们尝试在特定级别返回文件夹树。例如,从 5 级到 2 级,它不起作用:有时出现空白屏幕,有时出现错误的屏幕。然而,后退堆栈似乎很好,因为当用户使用 android 后退按钮回到更高的一个级别时,一切都很好。
因此,这是我们点击后的最后堆栈:
浏览片段#1
浏览片段#4
浏览片段#14
浏览片段#47
浏览片段#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...
}
有什么问题吗?谢谢!
试试这个getSupportFragmentManager().popBackStack(Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder(), POP_BACK_STACK_INCLUSIVE);
我遇到了像您这样的问题,并在阅读本文后设法解决了它 博客文章