当前位置: 首页 > 知识库问答 >
问题:

Android导航组件,如何知道结果是否设置在ViewCreated

牟嘉
2023-03-14

在片段I中设置FragmentResultListener,并等待结果:

setFragmentResultListener(EnableFingerPrintFragment.ARG_REQUEST_KEY) { _, bundle ->
    bundle.getString(EnableFingerPrintFragment.ARG_RESULT_KEY)
        ?.let { isActivatedResult: String ->
            // DO something
        }
}
findNavController().navigate(R.id.to_enableFingerPrintFragment,)

当结果返回时,将重新创建该片段,并调用onCreateView。

如何知道是第一次创建片段时调用了onCreateView,还是从返回的结果中调用的(在目标片段中设置了结果之后)?

如何知道是否在ViewCreated上设置了结果以检查此条件?

共有2个答案

郑琦
2023-03-14

我认为您必须在onCreate中初始化侦听器setFragmentResultListener,当您返回时,只需重新创建视图,onCreate不会调用两次。

https://developer.android.com/training/basics/fragments/pass-data-between

此外,在导航组件新更新中,您可以使用liveData轻松地在片段之间发送数据。

https://stackoverflow.com/a/60757744/7358545

东龙野
2023-03-14

在重新创建视图时,可能应该使用viewmodel检索数据。例如,当您从Backback弹出一个视图时,会重新创建以前的视图,但其中的viewmodel和数据不是,所以请考虑一下。

 类似资料:
  • 我使用Android Jetpack的导航功能在屏幕之间导航。现在我想动态设置startDestination。 我有一个活动,叫做主活动和两个片段,片段 我想使用导航架构组件设置上述流程。目前我使用的StartDestination如下所示,但它不能满足我的要求。 是否可以使用Android导航架构组件有条件地设置startDestination?

  • 我正在一个新的Android应用程序上使用导航组件,但我不知道怎么做 首先,我有我的主活动,我有main_navigation_graph 主要活动 NavHostFragment main_navigation_graph里面有3个碎片 这里一切都很好。问题是当我到达最后一个片段时,因为在这个片段上,我想根据BottomNavigationView输入(暂时)显示一些子片段(在新的NavHost

  • 到目前为止,我已经成功地导航到对话框并仅使用导航组件返回。问题是,我必须在对话框中做一些事情,并将结果返回到调用对话框的片段。 一种方法是使用共享viewmodel。但我必须使用。(活动)这让我的应用程序占用了一个单独的内存,即使我不再需要它。 另一种方法是覆盖show(framentManager, id)方法,访问片段管理器并从中访问先前的片段,然后将其设置为目标片段。我以前使用过目标片段方法

  • 我试图遵循谷歌最新的良好实践,用导航组件实现单个活动应用程序。 然而,在阅读了整个导航留档后,我仍然认为有很多情况下,他们没有解决。 例如,我应该如何实现以下情况: 应用程序在闪屏中启动。然后在加载后进入新闻片段。 注意:闪屏应该从后台弹出,因为它不应该再出现了。 然而,部分中的一些片段可以导航到一个新区域,该区域应该有一个后退按钮(而不是抽屉)。

  • 问题内容: 我想知道我是否在通话。 如果我正在通话,请启动服务(服务部分已清除)。我该怎么做呢? 参加通话时,我需要致电服务中心…我不知道该怎么做?有什么帮助吗? 问题答案: 您需要广播接收器… 在清单中声明广播接收器… 还声明使用权限… 广播接收器类… 还有一类可自定义电话状态侦听器…

  • 我目前正在学习新的Android导航架构组件 (https://developer.android.com/topic/libraries/architecture/navigation/). 我有点混淆了它的动机和概念,以下是我的不确定性: Android导航架构组件是否旨在消除在单个应用程序中使用多个活动的需要?这意味着,整个应用程序只需要一个单一活动,所有其他页面都将是片段? 在应用程序中使