回收者视图中的多次事件触发器(onClick)

时间:2019-03-12 22:15:15

标签: java android events android-recyclerview

我有一个带有multiviews视图的recyclerView,我已经正确地解决了所有不同的viewholder,并且一些viewholder用相同的ViewGroup表示,在viewgroup中,当我单击此按钮时,我有一个按钮,它会更改textView中的值,直到现在工作正常,问题是当我触发事件时,当我单击一个按钮时未按顺序特别在列表内特定顺序但在实例中保持不变时,同一视图组列表中所有视图组中的某些更改了,但我已经设置了一些断点但任何不正常的东西,任何想法为何会发生这样的事情?

我的ViewHolder Hirechary看起来像这样。

public abstract class AbstractViewHolderR extends RecyclerView.ViewHolder{

   public Button btn;
   public TextView view; 

   ...
}

public class ChildVH1 extends AbstractViewHolderR{
  ...
}

...other ViewHolder look the same.

/// the event listener look like this.
public class Click implement View.OnClickListener{
   AbstractViewHolderR object;
   public Click(AbstractViewHolderR o){
       object = o;
   }
   @Override
   public void onClick(View v){
     ////error checking omited
     Integer ii = Integer.Parse(object.view.getText().toString);
     ii++;
     object.view.setText(ii.ToString());
   }

}

1 个答案:

答案 0 :(得分:1)

将您的TextView和Btn移到View持有人,您应该像这样将Click侦听器添加到ViewHolder本身

public abstract class AbstractViewHolderR extends RecyclerView.ViewHolder{

         //UPDATE
   @Override
   public long getItemId(int position) {
       return position;
   }
   ...
}

public class ChildVH1 extends RecyclerView.ViewHolder{
   public Button btn;
   public TextView view; 

   public ChildVH1(View itemView){
      btn.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      //do your stuff
                      //you can use getAdapterPosition() to get current 
                       //position in adapter
                  }
              });
     }
}

}