在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.
答案 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"