回收器视图上的 Onclick 侦听器必须打开不同的活动

问题描述

这是我的适配器类,其中包含我的 onClick 侦听器,我希望它根据在回收器视图中单击的项目打开各种活动。我似乎无法实现可以完成这项工作的方法

 //DATA BOUND TO VIEWS
        @Override
        public void onBindViewHolder(MyHolder holder,int position) {
    
            //BIND DATA
            holder.ProductCategory.setText(products.get(position).getProductCategory());
            holder.Productimage.setimageResource(products.get(position).getProductimage());
    
            //IMPLEMENT CLICK LISTENER
            holder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onItemClick(View v,int pos) {
                    
                //i get errors when i try to implement in this method
    
                }
            });
    
        }

解决方法

您可以将点击监听器设置为您的持有者类的 itemView 为:

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Place your logic to open diffrent activity based on holder.getAdapterPosition()
            }
        });

并将您的活动打开逻辑放在 onClick() 方法中。使用 holder.getAdapterPosition() 定位当前视图

,

实际上,我只是通过添加“if else”语句解决了这个问题,该语句指定当回收器视图中的项目根据其在列表中的位置被点击时应采取的操作。

//DATA BOUND TO VIEWS
    @Override
    public void onBindViewHolder(MyHolder holder,int position) {

        //BIND DATA
        holder.ProductCategory.setText(products.get(position).getProductCategory());
        holder.ProductImage.setImageResource(products.get(position).getProductImage());

        //IMPLEMENT CLICK LISTENER


        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onItemClick(View v,int pos) {


                // this is the solution
                if(position == 0){
                    //first item clicked
                    Intent intent = new Intent(c,CartWeb.class);// what happens when an 
                                                                 // item is clicked
                    c.startActivity(intent);

                }else if(position == 1){
                    //second item clicked
                    Intent intent = new Intent(c,Options.class);
                    c.startActivity(intent);

                }

            }
        });
,

在 onCreateVHolder 中实现点击监听

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        // here implement which you want onItem click
                    }
            }
        });