使用三元运算符在 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}
我的 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}