【问题标题】:Android fragments navigation, going back to a specific fragments in the backstackAndroid Fragments导航,回到backstack中的特定fragments
【发布时间】:2019-09-30 07:50:43
【问题描述】:

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

我们正在尝试返回特定级别的文件夹树。例如,从5级到2级,它不起作用:有时会出现空白屏幕,有时会出现错误的屏幕。然而,backstack 似乎很好,因为当用户使用 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...
}

有什么问题吗?谢谢!

【问题讨论】:

  • 我认为您需要开始使用导航架构组件。事务不适合像您的应用这样的复杂用途。你可以从这个 url 检查它:developer.android.com/guide/navigation/… - 如果你可以使用它,你可以通过两种方式使用它。首先你可以通过设置参数顺利地去特定的片段,第二个它没有参数。如果您不初始化参数,您将返回最后一个片段!

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多