android:visibility无法使用visibile或goped选项

时间:2019-04-09 14:59:01

标签: android android-layout kotlin

我试图显示和隐藏基于布尔值的元素。在我的xml中,我有以下内容:

android:visibility="@{viewModel.interfaceEnable ? visible : gone}"

viewModel.interfaceEnable本身就是一个ObservableField:var interfaceEnable = ObservableField<Boolean>()visiblegoneandroid:visibility属性的值。但我收到此错误:

****/ data binding error ****msg:Identifiers must have user defined types from the XML file. visibile is missing it

为什么此方法无法设置此属性?

2 个答案:

答案 0 :(得分:3)

您应按以下方式使用View来使用常量:

android:visibility="@{viewModel.interfaceEnable ? View.VISIBLE : View.GONE}"

有关更多信息,请检查您可以使用Visibility documentationView.GONEView.INVISIBLEView.VISIBLE

还要确保为此使用了正确的导入类型,

<data>
    <import type="android.view.View" />
    <variable
        name="anyName"
        type="com.example.AnyName"/>
</data>

答案 1 :(得分:1)

可见和消失在View(View.VISIBLEView.GONE)中仍然是常量,并且该语句应该反映出来

android:visibility="@{viewModel.interfaceEnable ? View.VISIBLE : View.GONE}"

或者,您冷使用一个简单的绑定适配器。 EG

 @BindingAdapter("toVisibility")
 fun View.toVisibility(visible: Boolean) {
    visibility = if (visible) { View.VISIBLE } else { View.GONE }
 }

,在您的xml中使用

toVisibility="@{viewModel.interfaceEnable}"