【问题标题】:Use ternary operator for visibility in Android MVVM databinding在 Android MVVM 数据绑定中使用三元运算符实现可见性
【发布时间】:2018-03-13 11:56:29
【问题描述】:

我在我的 xml 文件中遇到此代码的问题,并出现错误: msg:Identifiers 必须具有来自 XML 文件的用户定义类型。视图缺少它。 我想根据一些条件隐藏布局。

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

【问题讨论】:

    标签: android mvvm android-databinding


    【解决方案1】:

    您需要导入它。添加

    <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}
    

    【讨论】:

    • 谢谢。有效。我知道绑定适配器,但试图这样做。
    【解决方案2】:

    另一种选择是使用BindingConversion

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

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

    【讨论】:

    • 当然,我不知怎么忘了转换它:)..但我认为这是可以理解的。
    猜你喜欢
    • 2018-10-18
    • 2018-01-07
    • 2013-07-14
    • 2016-11-19
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多