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

问题描述 投票:0回答:1

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

Solution 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].

Solution 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.
android android-databinding
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.