【问题标题】:Recreation of Fragments Using Navigation Component使用导航组件重新创建片段
【发布时间】:2019-09-30 14:24:19
【问题描述】:

在包含列表的片段的onViewCreated() 中,我观察如下实时数据:

     searchViewModel.allVideos.observe(viewLifecycleOwner, Observer {
        searchAdapter.updateList(it)
    })

当列表中的一项被点击时,它将使用导航组件进入详细信息页面。

      ...
       val bundle = bundleOf("postId" to post!!.id)
        v?.findNavController()?.navigate(R.id.action_to_detailsFragment, bundle, null, extras)

但是当用户返回列表时,他/她会在列表中看到重复的项目。再次调用onViewCreated 并将新项目添加到列表中。导航组件替换片段:(((

有人可以帮我吗?

【问题讨论】:

  • 更新列表后移除观察者
  • @coroutineDispatcher 我删除了它,但问题仍然存在
  • 你是在积累searchAdapter中的视频列表吗?
  • @SanlokLee 是的,我愿意。
  • @SalmanSeifian,一个更好的设计是让allVideos 拥有完整的视频列表,而不是一个一个片段地累积在适配器中。

标签: android android-livedata android-jetpack android-architecture-navigation


【解决方案1】:

请参考@JoseAlcerreca 的EventObserver,这允许您仅观察一次事件。参考文章LiveData By JoseAlcerreca

您应该替换整个适配器列表,而不是更新您的观察者回调列表。

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多