首页 > 解决方案 > 如何通过数据绑定设置按钮可点击性

问题描述

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

在视图模型中:

@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() 不是一个选项,因为我正在使用协程,我认为它与此冲突。

标签: androidxmlkotlindata-bindingandroid-databinding

解决方案


我想我让它工作如下:

@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属性做这件事。


推荐阅读