android - 如何通过数据绑定设置按钮可点击性
问题描述
我可以通过数据绑定轻松设置进度条的可见性,方法是使用以下方法设置绑定适配器:
在视图模型中:
@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
属性做这件事。
推荐阅读
- axapta - 表单添加字段但实际执行未出现
- azure - 如何从 azure function app 向 azure ad 身份验证的用户发送信号 r 通知?
- android - TextInputLayout 不会设置 errorIconDrawable
- php - 无法连接到 Apache 服务器上的 MySQL
- javascript - 避免使用存储在父级中的状态数组重新渲染兄弟 React 组件
- elasticsearch - github.com/elastic/helm-charts:如何获取 Kibana 的外部 url?
- swift - Swift CoreBluetooth 不是外围异常的有效特征
- java - Hadoop 抱怨不存在的匿名类 (NoClassDefFoundError)
- java - Android 的 MediaStore 中的 DATA 列还没有被弃用吗?
- r - 使用 R 将字符串的结尾移动到某些行的另一个变量字符串的开头