Android控制视图可见性,我得到错误

时间:2019-04-15 14:10:40

标签: android android-databinding

在android的数据绑定中,我只是想通过将viewmodel参数检查为profilePicUrl来控制视图的可见性

解决方案1:

profilePicUrl为空时,视图应消失,否则应可见,例如:

<data>
    <import type="android.view.View"/>
    <import type="android.text.TextUtils"/>

    <variable name="viewModel" type="xx.xxxxx.xxxxxxx.MyViewModel"/>
</data>

...

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="@{TextUtils.isEmpty(viewModel.profilePicUrl) ? View.GONE : View.VISIBLE}"
    >

我收到此错误:

error: '@{TextUtils.isEmpty(viewModel.profilePicUrl)? View.GONE : View.VISIBLE' is incompatible with attribute visibility (attr) enum [gone=2, invisible=1, visible=0].

解决方案2:

在收到此错误后,我尝试测试另一种解决方案,例如:

BindingAdapters类:

object BindingAdapters {
    @BindingAdapter("visibleIf")
    @JvmStatic
    fun changeVisibility(@NonNull imageView: ImageView, visible: Boolean) {
        if (visible) {
            imageView.visibility = View.VISIBLE
        } else {
            imageView.visibility = View.GONE
        }
    }
}

xml布局:

<data>
    <import type="android.view.View"/>
    <import type="android.text.TextUtils"/>

    <variable name="viewModel" type="xx.xxxxx.xxxxxxx.MyViewModel"/>
</data>

...

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:visibleIf="@{TextUtils.isEmpty(viewModel.profilePicUrl)}"
    >

我收到此错误:

error: attribute visibleIf (aka xxx.xxxxx.xxxxxxxx:visibleIf) not found.

1 个答案:

答案 0 :(得分:0)

您确定已正确启用数据绑定吗?您的代码是正确的,因此没有理由不起作用。

请确保将此代码添加到您的应用模块的Gradle文件中:

dataBinding {
    enabled = true
}

此外,我建议将其添加到gradle.properties文件中:

android.databinding.enableV2=true

在这里您可以看到similar question

关于第二种解决方案,有时导入包含适配器方法的对象会有所帮助:

<import type="com.your.package.name.BindingAdapters" />

另外,请确保已在layout标签上添加了此属性:

xmlns:app="http://schemas.android.com/apk/res-auto"