如何在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 数据库中检索数据?

如何在 RecyclerView 的 CardView 中实现对 Item Click 的操作以显示结果