将图片资源设置到RecyclerView列表项中

3

我想为我的 RecyclerView 中的每个 CardView 设置一张图片。

这是我的 onBindViewHolder 代码:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Masar masar=masrList.get(position);
    holder.masarName.setText(masar.getMasarTitle());
    holder.masarDesc.setText(masar.getMasarDescreption());

    // why i'm getting error here
    holder.masarImg.setImageDrawable(masar.getMasarImg());
}

这是我的类模型:

public class Masar {
    public String masarTitle;
    public String masarDescreption;
    public int masarImg;

    public Masar(String masarTitle, String masarDescreption) {
        this.masarTitle = masarTitle;
        this.masarDescreption = masarDescreption;
    }

    public Masar(String masarTitle, String masarDescreption, int masarImg) {
        this.masarTitle = masarTitle;
        this.masarDescreption = masarDescreption;
        this.masarImg = masarImg;
    }

    public String getMasarTitle() {
        return masarTitle;
    }

    public String getMasarDescreption() {
        return masarDescreption;
    }

    public int getMasarImg() {
        return masarImg;
    }

    public void setMasarImg(int masarImg) {
        this.masarImg = masarImg;
    }
}

请问为什么我会收到错误信息?

正确的方法是什么?


你在'setImageDrawable()方法中传递了什么值? - akhilesh0707
请将您的错误日志发布在此处。 - akhilesh0707
错误日志为:setImageDrawable无法应用于int。 我正在将int传递给它,int[] masa = new int[]{ R.drawable.jenen, R.drawable.qalt, R.drawable.m1, R.drawable.m1, }; - Yousef Ahmad
尝试使用 setImageDrawable(getResources().getDrawable(masar.getMasarImg())); - akhilesh0707
5个回答

1

使用以下代码替代 holder.masarImg.setImageDrawable(masar.getMasarImg());

使用

holder.masarImg.setImageDrawable(getResources().getDrawable(masar.getMasarImg()));

或者

holder.masarImg.setImageResource(masar.getMasarImg());

注意:要获取getResources(),请使用context

@YousefAhmad 请尝试使用 holder.masarImg.getContext().getResources() - akhilesh0707

1
你可以使用 Glide
             Glide.with(context)
            .load(where image live)
            .into(holder.your imageview);`

1

@akhilesh0707的第二个选项是按照以下方式操作:

holder.masarImg.setImageResource(masar.getMasarImg());

但我需要一个 Kotlin 解决方案,所以我对其进行了修改,现在它可以正常工作:

holder.masarImg.setImageResource(R.drawable.myfile.png)

希望这能帮助到有人,因为我花了数小时来尝试解决这个问题。


0
请使用 holder.masarImg.setImageResource(masar.getMasarImg()); 替代。

0

设置ImageView的图像有两种主要方式,通过Drawable或Resource Id。
您正在使用期望是Drawable类型的setImageDrawable,但是却传递了使用getMasarImg()获取的int。如果您有图像资源ID(这是int),则可以使用setImageResouce()以此方式设置图像。当然,您也可以使用getResources().getDrawable(int resource here),但这已被弃用(如果我没记错的话),因此请使用ContextCompat.getDrawable(getActivity(), your drawable here)替代。
大多数情况下,我会使用ContextCompat获取我的drawable,但要记住,您需要上下文 - getActivity() - 来使用这个,而且你在RecyclerView适配器中,你将无法获得上下文,因此您必须在构造函数中传递它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接