热门从另一个片段导航到主页片段

Posted

技术标签:

【中文标题】热门从另一个片段导航到主页片段【英文标题】:Hot to navigate to home fragment from another fragment 【发布时间】:2022-01-02 14:11:50 【问题描述】:

虽然我正在使用其他语言进行编码,但我是 android 编程新手。在特定情况下,我无法导航到主页片段。

我还有三个片段,即设置、容量和关于。所有这些都可以通过溢出工具栏菜单项访问。可以通过主页片段上的另一个按钮进行设置。

用例 1:单击主页片段上的设置按钮。设置打开。在设置中使用向上/主页或返回按钮。点击其中任何一个,都会到达主页片段。

用例 2:单击工具栏溢出菜单(三个点)。出现三个菜单项。选择设置菜单项。设置打开。在“设置”中,使用向上/主页或返回按钮。点击其中任何一个,都会到达主页片段。

用例 1 运行良好。我认为在定义片段之间导航的地方使用了 nav_graph defined。

用例 2 失败。按向上/主页按钮或返回按钮后,我得到白屏而不是落在主页片段上。

我在几个网站上学习过代码,包括 SO 和官方 Android 网站。但无法确定从另一个片段(特别是通过工具栏菜单和 nav_graph 之外)导航回主页片段时要使用哪种代码。

我在调试窗口中研究了堆栈中的方法。但也没有帮助我。

请告诉我要使用的方法。

【问题讨论】:

【参考方案1】:

首先在内容视图(框架视图)中设置 Home Fragment。 在顶部,您可以将下一个片段堆叠在另一个片段之上。 在activity中创建方法这个方法会弹出除Home Fragment之外的所有Fragment。

在代码下方添加片段使用

    Fragment fragment = new FragmentHome();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack(fragment.getClass().getSimpleName()).commit();

全部清除回家

    public void goToHome()

    FragmentManager fragmentManager = getSupportFragmentManager();
    for(int i = 0; i < fragmentManager.getBackStackEntryCount()-1; ++i)
    
        fragmentManager.popBackStack();
    

【讨论】:

他们说他们正在使用Navigation Component,这意味着您根本不应该直接使用FragmentManager @ianhanniballake,在这种情况下,如何将导航组件与用例 2 的工具栏菜单项集成。在当前代码中,当用户选择选择设置时,我将通过片段管理器遍历设置片段从工具栏菜单中。 @Nilesh,activity 中的哪个方法会调用 goToHome? 是的,从任何活动或片段本身调用 goToHome 方法 @Nilesh,它不起作用。顺序是 Home Fragment > Settings(通过工具栏项目选择)> 在 Settings > Blank screen 中单击 Up/Home 按钮。 fragmentManager.getBackStackEntryCount() 在工具栏项目选择之前为 0,在工具栏项目选择之后为 1。因此,goToHome 中的循环正在退出而没有弹出任何片段。我检查了 fragmentManager 并且只有一个 SettingsFragment 条目。所以 backstack 中没有 HomeFragment 的入口。【参考方案2】:

我继续寻找解决问题的方法。我在https://medium.com/mobile-app-development-publication/learn-android-navigation-component-through-coding-79dc47b240b3 中遇到了一个解决方案,它工作得很好,解决了白屏问题,也没有使用片段管理器的显式方法遍历另一个片段。它是关于将菜单项链接到导航图。

【讨论】:

以上是关于热门从另一个片段导航到主页片段的主要内容,如果未能解决你的问题,请参考以下文章

从一个片段移动到另一个片段时如何自动选择底部导航?

从另一个片段导航后,ViewPager在返回时不可见

从另一个片段打开一个片段始终保留前一个片段标题

如何从另一个片段访问片段对象

导航抽屉活动:在按钮单击时从片段移动到片段

使用导航从一个片段导航到另一个片段后,防止后按工作