首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据绑定加载图像

使用数据绑定加载图像
EN

Stack Overflow用户
提问于 2016-11-07 20:35:17
回答 4查看 13.7K关注 0票数 5

我想使用Android数据绑定来设置图像。我已经阅读了很多关于这方面的教程,但图像仍然没有出现。

在我的模型中,我有以下方法:

代码语言:javascript
复制
@BindingAdapter({"app:imageUrl"})
    public static void loadImage(ImageView view, String url) {

        Log.i("III", "Image - " + url);
        Context context = view.getContext();
        Glide.with(context).load(GlobalValues.img_start_url + url).into(view);
    }

我还应该提一下,"III","Image -“+ url永远不会打印出来,所以问题不在Glide上。

这是我的xml:

代码语言:javascript
复制
 <data>

    <variable
        name="feeling"
        type="bg.web3.helpkarma.ViewModels.Feeling"/>

</data>

<ImageView
            android:layout_width="wrap_content"
            android:id="@+id/icon"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            app:imageUrl="@{feeling.maleIcon}"/>

maleIcon是一个url字符串。

代码语言:javascript
复制
@SerializedName("male_icon")
@Expose
private String maleIcon;
EN

回答 4

Stack Overflow用户

发布于 2018-07-19 19:24:14

以下是步骤: 1.在model类的注释@BindAdapter中声明此方法(“{bind:应当与我们在其中获取imageurl的变量相同”})

代码语言:javascript
复制
  @BindingAdapter({"bind:imageUrl"})
public static void loadImage(ImageView view, String imageUrl) {
    Picasso.with(view.getContext())
            .load(imageUrl)
            .placeholder(R.drawable.placeholder)
            .into(view);}

2.转到适配器的xml文件并添加app:imageUrl="@{user.imageUrl}“。在这一行中,两个属性app:imageurl和user.imageUrl应该是我们在bean类中获取图像url的相同参数。同样,我们在第一步中也定义了相同的内容。

代码语言:javascript
复制
 <ImageView
            android:id="@+id/restaurantIV"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:scaleType="fitXY"
            app:image="@{user.image}"
            tools:ignore="ContentDescription"/>

3.)别忘了加,Datum是Bean类的名称,对象的用户名`

代码语言:javascript
复制
    <variable
        name="user"
        type="com.brst.cocktailclub.beans.restaurantSearch.Datum"/>
</data>`

4.)另外,在布局参数中添加xmlns:app="http://schemas.android.com/apk/res-auto“。

代码语言:javascript
复制
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

5.)记住你的Bean类应该扩展BaseObservable。

6.)最后在适配器中设置数据

代码语言:javascript
复制
 public void onBindViewHolder(@NonNull RestaurantAdapter.ViewHolder viewHolder, int i) {

    Datum datum=data.get(i);

    viewHolder.customRestaurantListBinding.setUser(datum);


}
票数 2
EN

Stack Overflow用户

发布于 2016-11-08 07:04:49

Android DataBinding @BindingAdapter只支持android命名空间或者不支持。因此,将定义替换为

代码语言:javascript
复制
@BindingAdapter("imageUrl")
public static void loadImage(ImageView view, String url) {
    [...]
}

此外,如果feeling.maleIcon为空,则永远不会调用loadImage()

票数 1
EN

Stack Overflow用户

发布于 2019-07-20 03:23:00

在这行中:

代码语言:javascript
复制
fun loadImage(layout: ConstraintLayout, url:String)

?添加到url类型。结果如下所示:

代码语言:javascript
复制
fun loadImage(layout: ConstraintLayout, url:String?)

在我的例子中,我将布局作为参数,而不是图像视图。这应该是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40465337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档