如何使用recyclerview在卡片浏览器的适配器中设置不同的图像

发布于 2025-02-05 07:26:24 字数 4939 浏览 3 评论 0原文

我正在尝试在不同的卡片视图中使用不同的图像,但是该应用在XML布局中设置的每个卡上都显示。

仿真器中的app effem

卡片元素的xml代码

<androidx.cardview.widget.CardView 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"
    android:id="@+id/cv"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:animateLayoutChanges="true"
    app:cardCornerRadius="20dp"
    app:cardElevation="4dp"
   android:layout_margin="5dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/iconImageView"
            android:src="@drawable/metodologia"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:paddingLeft="14dp"
            android:paddingRight="14dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

卡中的

package com.example.recyclerviewcardview;

import java.io.Serializable;

public class ListElement implements Serializable {
    public Integer icon;
    public String topic;
    public String law1;

    public ListElement(Integer icon, String topic, String law1) {
        this.icon = icon;
        this.topic = topic;
        this.law1 = law1;
    }

    public Integer getIcon() { return icon; }

    public void setIcon(Integer icon) { this.icon = icon; }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) { this.topic = topic; }

    public String getLaw1() { return law1; }

    public void setLaw1(String law1) { this.law1 = law1; }
}

适配器

package com.example.recyclerviewcardview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
    private List<ListElement> mData;
    private LayoutInflater mInflater;
    private Context context;
    final ListAdapter.OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(ListElement item);
    }

    public ListAdapter (List<ListElement> itemList, Context context, ListAdapter.OnItemClickListener listener) {
        this.mInflater = LayoutInflater.from(context);
        this.context = context;
        this.mData = itemList;
        this.listener = listener;
    }

    @Override
    public int getItemCount() {return mData.size();}

    @Override
    public ListAdapter.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_element, parent, false);
        return new ListAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder (final ListAdapter.ViewHolder holder, final int position) {
        holder.bindData(mData.get(position));
    }

//    public void setItems(List<ListElement> items) {mData = items; }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView iconImage;
        TextView topic, law1;

        ViewHolder (View itemView) {
            super (itemView);
            iconImage = itemView.findViewById(R.id.iconImageView);
            topic = itemView.findViewById(R.id.topicTextView);
            law1 = itemView.findViewById(R.id.law1TextView);

        }

        void bindData (final ListElement item) {
            iconImage.setImageResource(getIcon());
            topic.setText(item.getTopic());
            law1.setText(item.getLaw1());
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(item);
                }
            });
        }
    }
}

中的卡片元素。这是在适配器的结尾,

 void bindData (final ListElement item) {
            //--------------> iconImage.setImageResource(getIcon());
            topic.setText(item.getTopic());
            law1.setText(item.getLaw1());
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(item);
                }
            });
        }

我无法制作geticon()方法,

iconImage.setImageResource(getIcon());

我该怎么做?谢谢。

I'm trying to use different images in different cardviews but the app displays on every card the image set in the xml layout.

App appearance in emulator

XML code for the card

<androidx.cardview.widget.CardView 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"
    android:id="@+id/cv"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:animateLayoutChanges="true"
    app:cardCornerRadius="20dp"
    app:cardElevation="4dp"
   android:layout_margin="5dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/iconImageView"
            android:src="@drawable/metodologia"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:paddingLeft="14dp"
            android:paddingRight="14dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

Elements that are in the card

package com.example.recyclerviewcardview;

import java.io.Serializable;

public class ListElement implements Serializable {
    public Integer icon;
    public String topic;
    public String law1;

    public ListElement(Integer icon, String topic, String law1) {
        this.icon = icon;
        this.topic = topic;
        this.law1 = law1;
    }

    public Integer getIcon() { return icon; }

    public void setIcon(Integer icon) { this.icon = icon; }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) { this.topic = topic; }

    public String getLaw1() { return law1; }

    public void setLaw1(String law1) { this.law1 = law1; }
}

The adapter

package com.example.recyclerviewcardview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
    private List<ListElement> mData;
    private LayoutInflater mInflater;
    private Context context;
    final ListAdapter.OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(ListElement item);
    }

    public ListAdapter (List<ListElement> itemList, Context context, ListAdapter.OnItemClickListener listener) {
        this.mInflater = LayoutInflater.from(context);
        this.context = context;
        this.mData = itemList;
        this.listener = listener;
    }

    @Override
    public int getItemCount() {return mData.size();}

    @Override
    public ListAdapter.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_element, parent, false);
        return new ListAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder (final ListAdapter.ViewHolder holder, final int position) {
        holder.bindData(mData.get(position));
    }

//    public void setItems(List<ListElement> items) {mData = items; }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView iconImage;
        TextView topic, law1;

        ViewHolder (View itemView) {
            super (itemView);
            iconImage = itemView.findViewById(R.id.iconImageView);
            topic = itemView.findViewById(R.id.topicTextView);
            law1 = itemView.findViewById(R.id.law1TextView);

        }

        void bindData (final ListElement item) {
            iconImage.setImageResource(getIcon());
            topic.setText(item.getTopic());
            law1.setText(item.getLaw1());
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(item);
                }
            });
        }
    }
}

The problem is this, at the end of the adapter

 void bindData (final ListElement item) {
            //--------------> iconImage.setImageResource(getIcon());
            topic.setText(item.getTopic());
            law1.setText(item.getLaw1());
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(item);
                }
            });
        }

I can't make the getIcon() method to work

iconImage.setImageResource(getIcon());

How could I do it? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文