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

Posted

技术标签:

【中文标题】回收站视图上的 Onclick 侦听器必须打开不同的活动【英文标题】:Onclick Listener On Recycler View Has to Open Different activities 【发布时间】:2021-06-21 00:48:27 【问题描述】:

这是我的适配器类,其中包含我的 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
    
                
            );
    
        

【问题讨论】:

【参考方案1】:

您可以将点击侦听器设置为您的持有者类的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() 作为当前视图的位置

【讨论】:

【参考方案2】:

实际上,我通过添加“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);

                

            
        );

【讨论】:

【参考方案3】:

在 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
                    
            
        );

【讨论】:

以上是关于回收站视图上的 Onclick 侦听器必须打开不同的活动的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 onclick 侦听器将多个 url 传递给 recyclerview 中的 itemview

尝试使用 onclick 在回收视图中打开另一个活动

OnClick 在片段的回收器适配器中无法正常工作

如何通过 android 中的回收器视图运行 for 循环?

RecyclerView onClickListener 适用于所有片段

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器