Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AppCompatActivity、ViewModel和数据绑定_Android_Kotlin_Android Databinding_Android Architecture Components - Fatal编程技术网

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
  ..