【发布时间】:2019-06-13 01:24:48
【问题描述】:
当我有一个自定义对象时,我在数据绑定和实时数据方面遇到了一些问题。
例如:
我有一个MutableLiveData
val user = MutableLiveData<User>()
我使用两种方式的数据绑定
@={viewModel.user.name}
但是我的观察者并没有在 Fragment 中被解雇
viewModel.user.observer.
当我在FragmentBinding 生成的类中放置一个断点时,我可以看到 setValue 被调用并且 userLiveData 的用户值带有数据。
问题在于观察者没有在 Fragment 中被触发。
有人知道我在哪里做错了吗?
编辑 1
下面是我的片段代码:
val infoPessoalViewModel: InfoPessoalViewModel by viewModel()
lateinit var bindingView: FragmentInfoPessoalBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
bindingView = DataBindingUtil.inflate(inflater, R.layout.fragment_info_pessoal, container, false)
return bindingView.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
bindingView.apply {
lifecycleOwner = this@InfoPessoalFragment
viewModel = infoPessoalViewModel
}
infoPessoalViewModel.user.observe(this, Observer { user ->
user.confirmEmail?.let {
//NOT FIRED HERE
Log.d("LiveData","Fired!")
}
})
}
编辑 2
抱歉,我给出了一个带有不同名称的示例变量。
【问题讨论】:
-
你在
FragmentBinding上给setLifecycleOwner()打电话了吗? -
是的,伙计。我是。
-
请发布您的代码,包括
onCreateView()和观察者实现 -
完成,我的片段代码
-
好的。首先,您应该检查您的 BindingAdapter 逻辑。您有可能正在更新
User.name,而不是User本身。如果您只更新同一对象的字段LiveData可能不会通知观察者。其次,使用viewLifecycleOwner而不是this用于LiveData和数据绑定。
标签: android android-databinding android-livedata