0

我在理解 Android 中的 Fragments 时遇到了一些问题。

我的底部导航MainActivity有三个项目:FragmentA, FragmentB, FragmentC

FragmentC有一个按钮。当用户单击该按钮时,另一个FragmentD应显示附加信息。

  • FragmentD工具栏中应该有一个向上按钮。当用户单击该按钮时,他返回到FragmentC.
  • 当用户从导航中选择不同的片段时,FragmentD应该会消失。

在我的按钮的 onClick 中,我尝试使用它

FragmentManager manager = requireActivity().getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                transaction.replace(R.id.nav_host_fragment, new FragmentD());
                transaction.addToBackStack(null);
                transaction.commit();

作为我的 MainActivity 底部导航项的nav_host_fragment片段容器。

  • 为什么不transaction.replace替换FragmentCFragmentD?当我按下按钮时,FragmentD出现在上方FragmentC并且有一个透明的背景。FragmentD当我从底部导航中选择不同的项目时,也不会被其他片段替换。是因为我正在使用nav_host_fragment容器FragmentD吗?
  • 如何获得向上按钮?
4

1 回答 1

0

解决方案是使用 Navigation 而不是 FragmentTransaction。

在 Navigation 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(); }

于 2020-03-11T16:54:03.937 回答