与设置onClickListener相比,数据绑定表达式的优点是什么?

时间:2019-09-05 14:38:31

标签: android mvvm android-databinding

我已经看到一些使用MVVM表达式来处理事件的Android databinding示例,例如单击按钮。然后,有界的ViewModel方法将运行逻辑并张贴在LiveData对象上,该对象将通过片段观察该对象,例如进行导航。

Fragment.kt

viewModel.buttonClicked.observe(this, Observer {
   findNavController().navigate(action)
})

fragment.xml

<Button
        android:id="@+id/button_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="@{(view) -> viewModel.onButtonClicked()}"
        android:text="Button" />

ViewModel.kt

val buttonClicked = MutableLiveData<Unit>()
fun onButtonClicked() {
   // do some logic here

   buttonClicked.postValue(Unit)
}

所以我想知道是否仅通过使用onClickListener在按钮上注册kotlin-android-extensions就有什么明显的区别。

Fragment.kt

button_id.setOnClickListener {
   viewModel.doSomething()

   findNavController().navigate(action)
}

ViewModel.kt

fun doSomething() {
   // do some logic here
}

我知道第一个解决方案是事件驱动的,因此完全是异步的,在这些示例的大多数情况下,这是不需要的,因为最后一行代码总是发布在buttonClicked LiveData上。

据我了解,第二种方法也是MVVMish,所以我想知道这两种解决方案之间的真正区别是什么?

0 个答案:

没有答案