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

弹出片段后的多个LiveData观察器

於子晋
2023-03-14

>

  • 导航组件在HomeFragment中启动新的ProfileFragment。

    view.setonClickListener(navigation.createnavigateonClickListener(r.id.action_homefragment_to_profilefragment,null))

    在片段中创建ViewModel(PriceGraphFragment)。ViewModel已经被记录,并且具有多个观察者的数据只在ViewModel中初始化一次数据。

    priceViewModel.graphlivedata.observe(this,Observer{priceGraphDataMap:hashmap ?->//这被多次调用。})

    >

  • 在onCreate()方法中创建片段的ViewModel。priceviewmodel=viewmodelproviders.of(this).get(PriceDataViewModel::class.java)
  • 使用片段的活动和子片段的父片段创建ViewModel。
    priceViewModel=viewModelProviders.of(activity!!).get(priceDataViewModel::class.java)

    PriceViewModel=viewModelProviders.of(ParentFragment!!).get(PriceDataViewModel::class.java)

      null
    • 问题可能与在parentfragment的(HomeFragment)onviewcreated()中创建嵌套的ChildFragment(PriceGraphFragment)有关?

    父片段

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        user = viewModel.getCurrentUser()
         if (savedInstanceState == null) {
             fragmentManager
                    ?.beginTransaction()
                    ?.replace(binding.priceDataContainer.id, 
                       PriceGraphFragment.newInstance())
                    ?.commit()
    }
    
    • 测试用RxJava Observables替换LiveData对象。
  • 共有1个答案

    阎卓
    2023-03-14

    这基本上是体系结构中的一个bug。你可以在这里读到更多关于它的信息。您可以通过使用GetViewLifecyCleOwner而不是Observer中的这个来解决它。

    像这样:

    mViewModel.methodToObserve().observe(getViewLifecycleOwner(), new Observer<Type>() {
            @Override
            public void onChanged(@Nullable Type variable) {
    

    并将此代码放在onActivityCreate()中,因为使用GetViewLifecyCleOwner需要一个视图。

     类似资料:
    • 在onViewCreated中,我设置了Observer对象,以便在LiveData中所做的任何更改都可以在这里得到更改通知: 在ViewModel类中,我将LiveData参数设置为: 在init中,我设置了一个观察者:

    • 因此,我遇到的问题是,我希望在中有一个的实例,以便在活动和片段中观察它。我怎样才能做到这一点?

    • 此外,为什么Viewmodel不能观察到它自己的LiveData的变化?

    • 我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们。现在我希望将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从数据提取类返回的LiveData对象。observe方法需要一个LifecycleOwner对象作为第一个参数,但我的ViewModel中显然没有这个对象,而且我知道我不应该在ViewModel中保留对ac

    • 我在我的Android应用程序中遵循MVVM架构。(https://developer.android.com/jetpack/guide)。我所有的存储库函数都返回一个网络边界资源对象。你可以从jetpack指南链接中阅读更多关于这个设计实现的信息,或者从谷歌这里查看示例项目 在这个特殊的问题中,当我在屏幕上下拉时,我试图通过网络重新获取信息。 目前的工作执行情况 片段侦听器(当屏幕下拉时触发)

    • 我有一个片段和一个相应的viewmodel类。我在Fragment方法上从DB获取包装为LiveData的联系人列表。它工作得很好,我使用PagedListAdapter显示联系人列表,如下所示: 我在我的片段中添加了一个观察者,如下所示: 有一个按钮在我的片段,它把我带到另一个屏幕,在那个屏幕上我添加更多的联系人到表。但当我从那个屏幕回到我的片段时,观察者并没有被调用。这意味着返回时不会调用方法