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

片段重新创建导致观察者用Androidx导航库触发onChanged()

锺离锦
2023-03-14

问题:

在使用导航库时,我注意到当我导航回上一个片段时,它重新创建了该片段,从而重新注册了我的所有观察者,这再次触发onchanged()

deliveriesListViewModel.isMoreDataPresent.observe(this, Observer {
        if (!it) showSnackBar(getString(R.string.no_more_data))
    })

现在我从这里尝试了解决方案,但不幸的是,它不起作用

我还试图将我的LifecyCleOwner切换到我的活动,但这也不起作用。尝试将viewmodelproviders.of移动到oncreateonactivitycreate-不起作用

请建议纠正或任何想法,可以做些什么来防止在导航和方向改变后弹出快捷键。

    null

共有1个答案

钱欣悦
2023-03-14

这篇文章,特别是第1项,可能与你正在经历的事情有关。基本上,每次导航回片段时,可能会有多个生成的观察者,从而多次执行onchanged。使用片段的视图生命周期作为LifecyCleOwner应该可以防止这种情况发生,因此上面的代码如下所示:

deliveriesListViewModel.isMoreDataPresent.observe(viewLifecycleOwner, Observer {
        if (!it) showSnackBar(getString(R.string.no_more_data))
    })
 类似资料:
  • 我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。

  • 我有一个片段a,它向网络发送一个搜索查询,如果结果是肯定的,使用Android导航组件导航到片段B,并使用观察者完成。 在导航到片段B之后,我点击屏幕顶部的“<-”箭头,但是它没有返回到片段A,而是再次重新加载片段B。如果使用设备上的本机“后退”按钮,应用程序将崩溃,出现“IllegalArgumentException导航目的地未知”错误。

  • 我有一个视图模型,从场景中接收流作为livedata 在活动中,我们订阅了这个livedata,一些逻辑发生并使用了activityResult 当我们返回时,我们会用最后一个状态触发一个观察者,并再次执行之前的导航逻辑 如何忽略返回时具有相同值的观察者触发器?

  • 我正在使用BottomSheetDialogFraenge显示几个自定义设置的。 要求: 当我点击任何选项卡在BottomSheetDialogFraance我替换的片段,并将其添加到backstack,以便当用户点击的onBackPress或向上的行动,它应该回到最后设置的BottomSheetDialogFraank的片段。 我想使用导航架构组件来简化我的事务。 问题:如果我使用导航架构组件从

  • 我是一名iOS开发者,我开始尝试将我的一个应用程序移植到Android。一切都很顺利,直到我遇到了一个问题,这让我在过去几天里步履维艰。 我的应用程序使用的是导航抽屉模板,工作正常。通过点击所需的导航项,我可以很容易地在片段之间切换。然而,问题是当我试图从现有片段中切换内容时。换句话说,我的一个片段上有一个按钮,单击时,我希望它用另一个片段替换内容。我已经使用以下代码实现了这一点: 当此代码切换到