从NavController获取片段

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

enter image description here

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

我通过以下方式访问了OrderDetailFragment:

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

enter image description here

但我需要前一个片段。非常感谢。
2个回答

3

无法确定下面添加的代码片段是否是最佳解决方案,但对我而言,它可用于获取Android Navigation组件实现中使用的NavHostFragment中添加的最近/当前片段。

或者,您甚至可以重写您的activity的onActivityResult与您的fragment的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);

0
如果两个片段具有相同的父活动,即使用getActivity()获取活动引用并使用Activity.getSupportFragmentManager查找片段。

.....

活动X -> 片段A -> 片段B

如果片段B是片段A的子级,请使用getParentFragment。您要查找的片段将是此片段。

如果有任何不清楚的地方,请告诉我。

附言:Jetpack Navigation库执行与我们显式执行的相同操作。因此,Activity-Fragment的先前逻辑仍然有效。

编辑:

尝试使用(parentFragment as NavHostFragment).childFragmentManager.findFragmentById()

我上次忘记了活动在其布局中声明NavHostFragment,因此始终会有类型为“NavHostFrament”的根父片段

编辑:我已经找到了一个解决方法

parentFragment.childFragmentManager.getFragment(Bundle().also { it.putInt("foobar",0) }, "foobar")

谢谢 Rahul。它无法工作是因为父级是 NavGraph,而子级是 OrderDetailFragment。OrdersFragment 位于中间。 - Patrick
NavGraph 不应该是一个父级。因为父级可以是 ActivityFragment。不过我不确定,给我几分钟去检查一下。 - Rahul
它不起作用。"null cannot be cast to non-null type android.navigation.fragment.NavHostFragment",因为父级为空。我更新了我的问题。我必须使用navController工作。 - Patrick
这里的零是后退栈索引(如果您正在自己实现图形,则应该是这种情况)。 - Rahul
谢谢Rahul,但还是不行,父级为空。Fragments在NavController内部。 - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接