如何使用recyclerview在卡片浏览器的适配器中设置不同的图像
我正在尝试在不同的卡片视图中使用不同的图像,但是该应用在XML布局中设置的每个卡上都显示。
卡片元素的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.
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论