片段内有片段的 BottomNavigationView
BottomNavigationView with Fragment inside Fragment
我在理解 Android 中的片段时遇到了一些问题。
我的MainActivity
的底部导航有三个项目:FragmentA
、FragmentB
、FragmentC
。
FragmentC
有一个按钮。当用户单击该按钮时,另一个 FragmentD
应该显示附加信息。
FragmentD
工具栏中应该有一个向上按钮。当用户单击该按钮时,他返回到 FragmentC
。
- 当用户 select 使用与导航不同的片段时,
FragmentD
应该消失。
在我的按钮的 onClick 中,我尝试使用这个
FragmentManager manager = requireActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.nav_host_fragment, new FragmentD());
transaction.addToBackStack(null);
transaction.commit();
其中 nav_host_fragment
是我的 MainActivity 底部导航项的片段容器。
- 为什么
transaction.replace
不将 FragmentC
替换为 FragmentD
?当我按下按钮时,FragmentD
出现在 FragmentC
上方并且背景透明。当我 select 来自底部导航的不同项目时, FragmentD
也不会被其他片段替换。是因为我正在为 FragmentD
使用 nav_host_fragment
容器吗?
- 如何获得向上按钮?
解决方案是使用 Navigation 而不是 FragmentTransaction。
在导航 xml 文件中,我添加了 FragmentD 和一个以 FragmentD 作为目标的 FragmentC 操作。在按钮的 onClick 中,我现在调用 Navigation.findNavController(view).navigate(R.id.fragment_c_to_fragment_d);
为了使按钮起作用,我必须重写 onSupportNavigateUp:
@Override public boolean onSupportNavigateUp() {
return Navigation.findNavController(this, R.id.main_fragment).navigateUp() ||
super.onSupportNavigateUp(); }
我在理解 Android 中的片段时遇到了一些问题。
我的MainActivity
的底部导航有三个项目:FragmentA
、FragmentB
、FragmentC
。
FragmentC
有一个按钮。当用户单击该按钮时,另一个 FragmentD
应该显示附加信息。
FragmentD
工具栏中应该有一个向上按钮。当用户单击该按钮时,他返回到FragmentC
。- 当用户 select 使用与导航不同的片段时,
FragmentD
应该消失。
在我的按钮的 onClick 中,我尝试使用这个
FragmentManager manager = requireActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.nav_host_fragment, new FragmentD());
transaction.addToBackStack(null);
transaction.commit();
其中 nav_host_fragment
是我的 MainActivity 底部导航项的片段容器。
- 为什么
transaction.replace
不将FragmentC
替换为FragmentD
?当我按下按钮时,FragmentD
出现在FragmentC
上方并且背景透明。当我 select 来自底部导航的不同项目时,FragmentD
也不会被其他片段替换。是因为我正在为FragmentD
使用nav_host_fragment
容器吗? - 如何获得向上按钮?
解决方案是使用 Navigation 而不是 FragmentTransaction。
在导航 xml 文件中,我添加了 FragmentD 和一个以 FragmentD 作为目标的 FragmentC 操作。在按钮的 onClick 中,我现在调用 Navigation.findNavController(view).navigate(R.id.fragment_c_to_fragment_d);
为了使按钮起作用,我必须重写 onSupportNavigateUp:
@Override public boolean onSupportNavigateUp() {
return Navigation.findNavController(this, R.id.main_fragment).navigateUp() ||
super.onSupportNavigateUp(); }