具有Android数据绑定的自定义点击事件

问题描述 投票:0回答:2

我想对数据绑定中的每个单击事件设置特定的操作(例如,防止多次单击),换句话说,当用户单击每个视图时,首先执行特定操作,然后再执行与之相关的操作点击的视图(每个视图不同)。我怎样才能做到这一点?说明:我实现了MVVM并使用数据绑定

android android-databinding
2个回答
0
投票

这是我在这种情况下的工作。

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。


0
投票
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
}`
© www.soinside.com 2019 - 2024. All rights reserved.