从NavController获取片段

时间:2018-10-08 09:54:32

标签: android android-fragments kotlin navigation

我有一个NavController(navOrdersController),里面有2个片段。我当前的片段是OrderDetailFragment,我想访问第一个片段(OrdersFragment)以更新MainActivity中的数据。我该怎么办?

enter image description here

我尝试了findFragmentByTag和findFragmentByID,但始终返回null。

我通过以下方式访问OrderDetailFragment:

this.supportFragmentManager.fragments[position].findNavController().currentDestination

enter image description here

但是我需要前面的片段。非常感谢

2 个答案:

答案 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")