热门从另一个片段导航到主页片段
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
中遇到了一个解决方案,它工作得很好,解决了白屏问题,也没有使用片段管理器的显式方法遍历另一个片段。它是关于将菜单项链接到导航图。
【讨论】:
以上是关于热门从另一个片段导航到主页片段的主要内容,如果未能解决你的问题,请参考以下文章