使用三元运算符在Android MVVM数据绑定中可见

时间:2018-03-13 11:56:30

标签: android mvvm android-databinding

我在xml文件中遇到此代码的问题,但有错误: msg:标识符必须具有XML文件中的用户定义类型。视图缺少它。 我想根据某些条件隐藏布局。

<include
            layout="@layout/test_ui"
            android:visibility="@{(viewModel.valueFormat==001) ? View.VISIBLE : View.GONE}"
            bind:viewModel="@{viewModel}" />

2 个答案:

答案 0 :(得分:7)

你需要导入它。添加

<import type="android.view.View"/>

在数据部分。您还可以为它添加一个BindingAdapter,它接受一个布尔值并执行相同的操作。 E.g。

@BindingAdapter({"visibility"})
public static void setVisibility(View view, boolean visible) {
    view.setVisibility(visible ? View.VISIBLE : View.GONE);
}

然后你就像使用它一样:

visibility="@{viewModel.valueFormat==001}

答案 1 :(得分:1)

另一种选择是使用BindingConversion

@BindingConversion
fun convertBooleanToVisibility(visible: Boolean): Int {
   return if (visible) View.VISIBLE else View.GONE
}

然后你可以简单地使用 android:visbility="@{booleanVariable}