Android片段导航,返回到堆栈中的特定片段

时间:2019-09-30 07:50:43

标签: android android-fragments android-activity navigation back-stack

在我们的个人API中,我们可以解析一个文件夹树(不是设备中的一棵树,而是我们从Web服务获得的一棵树)。因此,我们正在显示每个文件夹级别及其在Fragment中的内容。然后,如果用户选择一个文件夹,我们将显示相同的片段以及其他内容。 我们将此片段称为BrowseFragment

我们正在尝试返回特定级别的文件夹树。例如,从第5级到第2级,它不起作用:有时显示空白屏幕,有时显示错误屏幕。但是,backstack看起来不错,因为当用户使用android back按钮返回到更高一级时,一切都很好。

因此,这是单击几次后的背景信息:

  

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 :(得分:0)

尝试这个getSupportFragmentManager().popBackStack(Constants.FRAGMENT_KEY_BROWSE + folderSelected.getIdFolder(), POP_BACK_STACK_INCLUSIVE); 我遇到了像您这样的问题,并在阅读本文后设法解决了这个问题 blog post

相关问题