绑定适配器无法正常工作
Posted
技术标签:
【中文标题】绑定适配器无法正常工作【英文标题】:Binding Adapter not working properly 【发布时间】:2017-05-22 20:20:47 【问题描述】:我很难让@BindingAdapter
在我的项目中工作。
@BindingAdapter("imageUrl")
public static void setImageUrl(ImageView imageView, String url)
Log.d("TEST","URL: " + url);
上面的代码显示了它是如何在我的 ViewModel 中实现的。没什么特别的。
<ImageView
android:id="@+id/image_holder"
android:layout_
android:layout_
android:scaleType="centerCrop"
android:layout_below="@id/profile_container"
app:imageUrl="@item.imageUrl"
tools:src="@drawable/placeholder_image"/>
这不起作用。命名空间应用程序未绑定。所以我错过了什么。我试过以下 https://medium.com/google-developers/android-data-binding-custom-setters-55a25a7aea47#.6ygaiwooh 看看他们是如何设置 bindingAdapter 的。但是我错过了一些东西
【问题讨论】:
您是否在布局标签中添加了命名空间以及xmlns:android
?如果没有,您还应该添加xmlns:app="http://schemas.android.com/apk/res-auto"
。
【参考方案1】:
我遇到了同样的问题,我错过了使用以下方式绑定布局:
DataBindingUtil.setContentView(activity, layoutResId);
【讨论】:
tnx man 我用这个也为我工作 DataBindingUtil.inflate( LayoutInflater.from(context), R.layout.invite_dialog, null, false); @Swapnil:请您回答类似问题:***.com/questions/70756604/…【参考方案2】:我建议对可绑定属性使用 "bind" 命名空间,并为适配器参数和布局属性使用相同的名称。
适配器:
@BindingAdapter("bind:imageUrl")
public static void setImageUrl(ImageView imageView, String imageUrl)
Log.d("TEST","URL: " + imageUrl);
布局:
<ImageView
android:id="@+id/image_holder"
android:layout_
android:layout_
android:scaleType="centerCrop"
android:layout_below="@id/profile_container"
bind:imageUrl="@item.imageUrl"
tools:src="@drawable/placeholder_image"/>
其中命名空间 "app" 被替换为 "bind"。在您的布局根目录上:
xmlns:bind="http://schemas.android.com/apk/res-auto"
【讨论】:
【参考方案3】:请记住将以下行添加到您应用的 build.gradle
文件中:
apply plugin: 'kotlin-kapt'
并检查@BindingAdapter 语法:
@BindingAdapter("visibleOnScreen")
fun View.setVisibility(isVisible: ObservableBoolean)
if (isVisible.get())
this.visibility = View.VISIBLE
else
this.visibility = View.GONE
在视图的 xml 中:
<TextView
android:layout_
android:layout_
app:visibleOnScreen="@viewModel.errorOccurred" />
视图模型:
var errorOccurred = androidx.databinding.ObservableBoolean(false)
【讨论】:
【参考方案4】:将以下行添加到您应用的 build.Gradle 文件中:
apply plugin: 'kotlin-kapt'
并在应用的 build.Gradle 文件中的 android 块中启用数据绑定:
android
.
.
buildFeatures
dataBinding true
.
.
创建 BindingAdapters.kt 文件并使用以下语法添加@BindingAdapter:
@BindingAdapter("imageUrl")
fun ImageView.bindImage(imgUrl: String)
Glide.with(context)
.load(imgUrl)
.into(this)
在视图的 xml 中使用 ImageView 中的 imageUrl='@"YourImageUrl"' 语法:
<ImageView
android:id="@+id/imageView3"
android:layout_
android:layout_
android:background="@drawable/img"
imageUrl='@"YourImageUrl"'/>
这很好用;)
我的项目 Gradle 版本:7.0.0
【讨论】:
【参考方案5】:您在 xml 中使用 app:imageUrl="@item.imageUrl"
,请确保您的模型中有一个名为 imageUrl
的字符串。
您必须传递图像的 url 链接,而不是 binderAdapter 的名称。
语法:
app:BinderAdapterName="@item.imagelink"
【讨论】:
以上是关于绑定适配器无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
当适配器包含带有 onClickListener 的按钮时,OnItemClickListener 无法正常工作
带有复选框和自定义适配器的 ListView,片段无法正常工作
适配器中的AutoCompleteTextView无法正常工作
Android - 通过 getView 函数在自定义 listView 适配器内设置 ImageView 的源无法正常工作