首页 > 解决方案 > Image View src 在自定义网格视图适配器中不起作用

问题描述

我有一个自定义的 gridview 适配器 CoursesAdapter,它正在与 cardview 一起使用,但由于某些原因,从 arraylist 设置图像视图 src 时不起作用。但是当我将图像 ID 直接分配给 imageView 时,它可以工作。

任何帮助表示赞赏。

自定义 GridView 适配器

    public class coursesAdapter extends BaseAdapter {

        private Context context;
        private ArrayList<Course> courseArrayList;

        //constructor

        public coursesAdapter(Context context, ArrayList<Course> courseArrayList) {
            this.context = context;
            this.courseArrayList = courseArrayList;
        }

        @Override
        public int getCount() {
            return courseArrayList.size();
        }

        @Override
        public Course getItem(int position) {
            return courseArrayList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final Course course=courseArrayList.get(position);
            LayoutInflater layoutInflater=LayoutInflater.from(context);
            convertView=layoutInflater.inflate(R.layout.course_cardview,parent,false);
            final ImageView courseImage=(ImageView) convertView.findViewById(R.id.course_image_imageView);

            final TextView courseTitle = convertView.findViewById(R.id.course_title_textView);
   //Here if I use courseImage.setImageResource(R.drawable.sample_thumbnail); 
//image is shown            
      courseImage.setImageResource(courseArrayList.get(position).getImage());
            courseTitle.setText(courseArrayList.get(position).getName());

            return convertView;`enter code here`
        }
    }

由于此适配器用于测试目的,我已用相同的值填充数组列表。

适配器的数组列表

for(int i=0;i<10;i++)
        courseArrayList.add(new Course("Maths","Arslan",R.drawable.sample_thumbnail));

课程班

public class Course implements Parcelable{
    private String name; // course Name
    private String lecturer; // course lecturer
    private int image; //course Image

    //constructors

    public Course(String name, String lecturer, int image) {
        this.name = name;
        this.lecturer = lecturer;
        this.image = image;
    }

    //Getters and Setters


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLecturer() {
        return lecturer;
    }

    public void setLecturer(String lecturer) {
        this.lecturer = lecturer;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    // Parcelable Overridden functions

    protected Course(Parcel in) {
        name = in.readString();
        lecturer = in.readString();
        image = in.readInt();
    }

    public static final Creator<Course> CREATOR = new Creator<Course>() {
        @Override
        public Course createFromParcel(Parcel in) {
            return new Course(in);
        }

        @Override
        public Course[] newArray(int size) {
            return new Course[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(lecturer);
        dest.writeInt(image);
    }
}

标签: androidandroid-imageviewandroid-cardviewbaseadapterandroid-gridview

解决方案


更改此行:

courseImage.setImageResource(courseArrayList.get(position).getImage());

至 :

courseImage.setImageResource(ContextCompat.getDrawable(context,courseArrayList.get(position).getImage()));

推荐阅读