【问题标题】:Onclick Listener On Recycler View Has to Open Different activities回收站视图上的 Onclick 侦听器必须打开不同的活动
【发布时间】: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
    
                }
            });
    
        }

【问题讨论】:

    标签: java android android-recyclerview adapter onclicklistener


    【解决方案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
                            }
                    }
                });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多