【发布时间】:2017-03-18 18:28:24
【问题描述】:
我正在尝试找出 Android 中的双向数据绑定库。我想通过更改 xml 中的 android:enabled 属性来启用/禁用 LinearLayout(以及内部的 RelativeLayout)。
XML 部分如下所示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:gravity="center"
android:enabled="@={viewModel.asd}"
ndroid:onClick="@{()-> viewModel.doSomething()}"
android:background="@drawable/shortcut_button_label_selector"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="40dp"
android:layout_height="match_parent"
android:enabled="@={viewModel.asd}"
android:background="@drawable/shortcut_button_icon_selector">
现在,我之所以要这样做是因为这两个选择器(shortcut_button_label_selector 和shortcut_button_icon_selector),它们看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@color/grey_300"></item>
<item
android:state_enabled="true"
android:drawable="@color/menubar_background"></item>
</selector>
我希望能够根据视图上的启用属性动态更改背景。我选择启用属性的原因是我在 LinearLayout 上获得了 onClick 事件,我需要禁用它(使其不可点击);我对 android:clickable 属性有同样的问题。
问题是当我尝试编译它时出现错误
java.lang.RuntimeException:发现数据绑定错误。 ****/ 数据绑定错误 ****msg:在 android.widget.LinearLayout 上找不到属性“android:enabled”的 getter,其值类型为布尔值。
viewModel.asd 只是一个公共布尔值/ ObservableBoolean,我都试过了。
谁能解释发生了什么以及为什么我会收到错误消息?我可以在 View 类(布局扩展)中看到 isEnabled / setEnabled 方法。
我有什么办法可以继续我的方法,还是我必须完全改变它?
//编辑:我可能不需要双向绑定..我不知道了 // 继续编辑:它可能与我的 ViewModel 继承有关:
布局文件有一个 a.b.MainViewModel 类型的 viewModel,但字段 asd 位于 a.b.BaseViewModel 中(MainViewModel 扩展了 BaseViewModel)。现在我想要的是,如果我从扩展 BaseViewModel 的任何其他视图更新 asd 字段,它将自动更新启用的属性..
它也不适用于字符串。我猜这是继承的事情
亲切的问候, 马辛
【问题讨论】:
-
asd是静态字段吗?
标签: android android-databinding 2-way-object-databinding