android - 在数据绑定(bind)上调用 setLifecycleOwner 时,我应该传递从 getViewLifecycleOwner 返回的 Fragment 实例还是所有者

标签 android android-lifecycle android-databinding

哪种方法是正确的:

  1. Fragment 实例作为 lifecycleOwner 传递:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        val binding = FragmentEventSettingsBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = this
        return binding.root
    }
    
  2. 传递 fragment viewLifecycleOwner:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        val binding = FragmentEventSettingsBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = viewLifecycleOwner
        return binding.root
    }
    

最佳答案

推荐的解决方案是通过支持库 28.0.0 和 AndroidX 1.0.0 中添加的 getViewLifecycleOwner() 或 getViewLifecycleOwnerLiveData() 使用 fragment 的 View 生命周期,这样每次 fragment 的 View 被销毁时 LiveData 都会删除观察者

引用:5 common mistakes when using Architecture Components

关于android - 在数据绑定(bind)上调用 setLifecycleOwner 时,我应该传递从 getViewLifecycleOwner 返回的 Fragment 实例还是所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58732672/

相关文章:

android - 如何禁用数字选择器中的上一个和下一个数字(android)

安卓界面设计

android - 无法将项目添加到自定义数组适配器

android - 智能检测应用程序背景

android - 如何在 viewModel 中使用双向绑定(bind)

android - 当新组在 ExpandableListView 中展开时,折叠先前展开的组

android - ArrayAdapter 没有默认构造函数

java - 发现多个文件的操作系统独立路径为 'android/databinding/DataBindingComponent.java'

java - Kotlin stdlib 和数据绑定(bind)

android - ( Activity 娱乐) : what to do with a backstack built on invalidated data?