我有一个NavController(navOrdersController),里面有2个片段。我当前的片段是OrderDetailFragment,我想访问第一个片段(OrdersFragment)以更新MainActivity中的数据。我该怎么办?
我尝试了findFragmentByTag和findFragmentByID,但始终返回null。
我通过以下方式访问OrderDetailFragment:
this.supportFragmentManager.fragments[position].findNavController().currentDestination
但是我需要前面的片段。非常感谢
答案 0 :(得分:1)
不能说代码片段(我在下面添加了)是最好的解决方案,但它对我有用,可以在 Android 导航组件的实现中使用的 NavHostFragment
中添加最近/当前片段
或
您甚至可以使用您的片段覆盖 onActivityResult
的活动,您只需要使用以下代码片段获取添加的 Fragment
并将其命名为 onActivityResult
:
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
Fragment fragment = navHostFragment.getChildFragmentManager().getFragments().get(0);
fragment.onActivityResult(requestCode, resultCode, data);
答案 1 :(得分:0)
如果两个片段都具有相同的父活动,即使用getActivity()
获取活动参考,然后使用Activity.getSupportFragmentManager查找片段。
.....
活动X->片段A->片段B
如果片段B是片段A的子代,请使用getParentFragment。您要寻找的片段就是这个片段。
让我知道是否有不清楚的地方。
PS:Jetpack导航库执行的工作与我们显式进行的相同。因此,Activity-Fragment的先前逻辑仍然有效。
编辑:
尝试(parentFragment as NavHostFragment).childFragmentManager.findFragmentById()
我上次忘记了该活动在其布局中具有NavHostFragment的声明,因此将始终存在根类型为'NavHostFrament'的父片段
编辑: 我已经找到解决方法了
parentFragment.childFragmentManager.getFragment(Bundle().also { it.putInt("foobar",0) }, "foobar")