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

Use ternary operator for visibility in Android MVVM databinding

我的 xml 文件中的这段代码存在错误: msg:Identifiers 必须具有来自 XML 文件的用户定义类型。视图丢失了它。 我想根据某些情况隐藏布局。

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

您需要导入它。添加

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

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

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

然后你像这样使用它:

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

另一种选择是使用 BindingConversion:

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

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