我想对数据绑定中的每个单击事件设置特定的操作(例如,防止多次单击),换句话说,当用户单击每个视图时,首先执行特定操作,然后再执行与之相关的操作点击的视图(每个视图不同)。我怎样才能做到这一点?说明:我实现了MVVM并使用数据绑定
这是我在这种情况下的工作。
First:在XML中添加onclick,以在视图模型上调用方法并将其传递给视图
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="model"
type="....ViewModel" />
</data>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="@{(v)-> model.onClick(v)}"/>
</layout>
Second:使用kotlin扩展名添加防止双击科特林:
fun View.preventDoubleClick() {
isClickable = false
Handler().postDelayed({ isClickable = true },500L)
}
第三:
科特琳:
fun onClick(view: View?){
view?.preventDoubleClick()
}
现在您可以访问在视图模型中单击的视图。请记住,使您的视图可为空。例如,当您想为您的方法添加单元测试时,可以仅向视图发送null。
First: create a mutableLiveData of type boolean in your SomeViewModel class
with initial value to true
`val data = MutableLiveData<Boolean>(true) `
<data>
<variable
name="viewModel"
type="..SomeViewModel" />
</data>
Second: for Button tag in xml set android:enabled = "@{viewModel.data}"
and for and android:onClick="@{() -> viewModel.disableButtonAndPerformRequiredAction()}"
`// In viewmodel
fun disableButtonAndPerformRequiredAction() {
data.value = false
// Perform other tasks
// post executing required task set
data.value = true
}`