如何通过数据绑定设置按钮的可点击性

How to set button clickability through Databinding

我可以通过数据绑定轻松设置进度条的可见性,方法是使用如下方法设置绑定适配器:

在视图模型中:

@BindingAdapter("android:visibility")
fun setVisibility(view: View, visible: Boolean) {
    view.visibility = if (visible) View.INVISIBLE else View.VISIBLE
}
@Bindable
    var barProgress = ObservableField<Boolean>()

    fun makeVisible(){
        this.barProgress.set(true)
    }
    fun makeInvisible(){
        this.barProgress.set(false)
    }

布局中xml:

android:visibility="@{!myViewModel.barProgress}"

我可以通过这种或其他方式以同样的方式分配 android:clickable 吗?如果我要更改代码,问题在于没有适合此方法的 View 属性。尝试在 main 方法上设置 setEnabled() 或 setClickable() 不是一个选项,因为我使用的是协同程序,我认为它与之冲突。

我想我让它工作如下:

@BindingAdapter("android:clickable")
fun setClickable(view: View, clickable: Boolean) {
    view.isClickable = !clickable
}

@Bindable
var clickable = ObservableField<Boolean>()

fun makeClickable(){
    this.clickable.set(true)
    }

fun makeUnclickable(){
    this.clickable.set(false)
    }

在XML中:

android:clickable="@{myViewModel.clickable}"

奖金,设置 enabled 属性:

@BindingAdapter("android:enabled")
fun setEnabled(view: View, enabled: Boolean) {
    view.isEnabled = !enabled
}

@Bindable
var enabled = ObservableField<Boolean>()

fun makeEnabled(){
    this.enabled.set(true)
}

fun makeDisabled(){
    this.enabled.set(false)
}

并在 xml 中:

android:enabled="@{myViewModel.enabled}"

我想你可以猜到如何为 andorid:focusable 属性做到这一点。