如何在recyclerview中为cardview android设置带有int数组的onclicklistener
Posted
技术标签:
【中文标题】如何在recyclerview中为cardview android设置带有int数组的onclicklistener【英文标题】:how to set onclicklistener with int array in recyclerview for cardview android 【发布时间】:2021-11-28 21:49:40 【问题描述】:我想使用 if else 语句单击 Cardview 项目并打算进行其他活动。请帮忙。
MainActivity.java
公共类 MainActivity 扩展 AppCompatActivity
private RecyclerView imagesRV;
private int[] images = R.drawable.image01, R.drawable.image02, R.drawable.image03, R.drawable.image04, R.drawable.image05, R.drawable.image06, R.drawable.image07, R.drawable.image08;
private RecyclerViewAdapter imageAdapter;
//private ArrayList<String> imagePaths;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
imagesRV = (RecyclerView) findViewById(R.id.idRVImages);
prepareRecyclerView();
private void prepareRecyclerView()
imageAdapter = new RecyclerViewAdapter(MainActivity.this, images);
GridLayoutManager manager = new GridLayoutManager(MainActivity.this, 2);
imagesRV.setLayoutManager(manager);
imagesRV.setAdapter(imageAdapter);
RecyclerViewAdapter.java
公共类 RecyclerViewAdapter 扩展 RecyclerView.Adapter
private final Context context;
private final int[] imagePathArrayList;
public RecyclerViewAdapter(Context context, int[] imagePathArrayList)
this.context = context;
this.imagePathArrayList = imagePathArrayList;
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);
return new RecyclerViewHolder(view);
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position)
int imageId = imagePathArrayList[position];
Picasso.get().load(imageId).placeholder(R.drawable.ic_launcher_background).into(holder.imageIV);
holder.itemView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
);
@Override
public int getItemCount()
return imagePathArrayList.length;
public static class RecyclerViewHolder extends RecyclerView.ViewHolder
private final ImageView imageIV;
public RecyclerViewHolder(@NonNull View itemView)
super(itemView);
imageIV = itemView.findViewById(R.id.idIVImage);
【问题讨论】:
【参考方案1】:创建接口:
public interface MyOnClick
void onClick(int imageId);
向构造函数添加对 MyOnClick 的引用
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder>
...
private final MyOnClick myOnClick;
public RecyclerViewAdapter(Context context, int[] imagePathArrayList, MyOnClick myOnClick)
this.context = context;
this.imagePathArrayList = imagePathArrayList;
this.myOnClick = myOnClick
...
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position)
final int imageId = imagePathArrayList[position];
Picasso.get().load(imageId).placeholder(R.drawable.ic_launcher_background).into(holder.imageIV);
holder.itemView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
myOnClick.onClick(imageId)
);
将 MyOnClick 传递给适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder>
private RecyclerView imagesRV;
private int[] images = R.drawable.image01, R.drawable.image02, R.drawable.image03, R.drawable.image04, R.drawable.image05, R.drawable.image06, R.drawable.image07, R.drawable.image08;
private RecyclerViewAdapter imageAdapter;
//private ArrayList<String> imagePaths;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
imagesRV = (RecyclerView) findViewById(R.id.idRVImages);
prepareRecyclerView();
private void prepareRecyclerView()
imageAdapter = new RecyclerViewAdapter(this, images, new MyOnClick()
@Override
public void onClick(int imageId)
// Your action
);
GridLayoutManager manager = new GridLayoutManager(MainActivity.this, 2);
imagesRV.setLayoutManager(manager);
imagesRV.setAdapter(imageAdapter);
【讨论】:
以上是关于如何在recyclerview中为cardview android设置带有int数组的onclicklistener的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Recyclerview 和 Cardview 透明
创建卡片时如何在 recyclerview (cardview) 中添加日期。 (卡片创建日期)
如何使用 TabLayout 在 Fragment 中使用 CardView 行实现 RecyclerView
翻译Android RecyclerView CardView
如何在我的 recyclerview 中使用 cardview 设置 onclick 侦听器,并在单击 recyclerview 时从 firebase 数据库中检索数据?