在数据绑定android只是我想通过检查viewmodel参数为profilePicUrl
来控制视图可见性
当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].
在得到此错误后,我尝试测试另一种解决方案,例如:
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.
您确定已正确启用数据绑定吗?你的代码是正确的,所以没有理由不这样做。
请确保此代码已添加到您的应用模块的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"