Android AppCompatActivity、ViewModel和数据绑定
试图找出谷歌最近的工具和概念:,和 因此,假设有一个Android AppCompatActivity、ViewModel和数据绑定,android,kotlin,android-databinding,android-architecture-components,Android,Kotlin,Android Databinding,Android Architecture Components,试图找出谷歌最近的工具和概念:,和 因此,假设有一个FooActivity扩展了AppCompatActivity(能够使用支持库)并实现了LifecycleOwner接口(来自参考:使用LiveData需要): FooActivity.kt: class FooActivity: AppCompatActivity(), LifecycleObserver { ... 我们设置绑定: .. private val mBinding: by lazy { DataBindi
FooActivity
扩展了AppCompatActivity
(能够使用支持库)并实现了LifecycleOwner
接口(来自参考:使用LiveData需要):
FooActivity.kt:
class FooActivity: AppCompatActivity(), LifecycleObserver {
...
我们设置绑定:
..
private val mBinding: by lazy {
DataBindingUtil.setContentView<ActivityFooBinding>(this, R.layout.activity_foo)
}
..
最后,我们定义barObserver
:
..
class BarObserver : Observer<List<String>> {
override fun onChanged(p0: List<String>?) {
Log.d("Say", "changed:")
}
}
barObserver = BarObserver()
..
FooViewModel:
..
private var mBar = MutableLiveData<List<String>>()
..
mBar.value = listValueOf("1", "2", "3")
..
fun getBar(): LiveData<List<String>>? = mBar
..
。。
私有变量mBar=MutableLiveData()
..
mBar.value=listValueOf(“1”、“2”、“3”)
..
fun getBar():LiveData?=工商管理硕士
..
如果您没有扩展LifecycleActivity,那么您的活动应该实现LifecycleRegistryOwner而不是LifecycleObserver。看看这本书
然后您可以将其传递给liveData.observe(lifecycleOwner,observer)这是一个很好的捕获。但是,
observer
onChange
仍然不会被触发。我可以确认bar
的值确实发生了更改(已调试)。可能是观察者
必须以某种方式与获取生命周期
连接?LiveData处理生命周期。确保您正确设置了LiveData的值。请查看Edit2。还缺少什么吗?没关系,稍微调整一下就行了。总的来说,感谢您指出了正确的方向。这种方法不再有效,因为LifecycleRegistryOwner
现在已被弃用。您确定从这个viewModel.getBars()
函数中没有得到null
。请检查此方法,在这里您可以找到一个实时数据的工作示例。
class FooActivity: AppCompatActivity(), LifecycleRegistryOwner{
override fun getLifecycle(): LifecycleRegistry {
var lifecycle = LifecycleRegistry(this)
lifecycle.addObserver(barObserver)
return lifecycle
}
..
private var mBar = MutableLiveData<List<String>>()
..
mBar.value = listValueOf("1", "2", "3")
..
fun getBar(): LiveData<List<String>>? = mBar
..