如何从 RecyclerView 获取特定的视图复选框?

How to get specific view checkbox from RecyclerView?

我有一个 recyclerview,里面装满了相对布局,每个布局都有一个文本视图和一个复选框。在我的 recyclerview 过滤器片段中,我正在实施 android.widget.CompoundButton.OnCheckedChangeListener 以尝试区分点击了 recyclerview 项目的哪个文本视图,然后执行一个操作,这同样适用于取消检查阶段,如何实现?

谢谢

在 onCheckedChanged 中,您可以通过 checkbox.getParent() 从您的复选框中获取您的相对布局。
然后您可以将任何更改应用于您的视图。
如果你想要在adapter中的核心位置,你可以通过your_recyler_view.getChildAdapterPosition(get_relative_layout)
得到 希望这有帮助。

不能直接使用onclick。我找到了一个解决方案,它对我有用。尝试一下。

第 1 步:先将此 RecyclerItemClickListener class 添加到您的包中。

public class RecyclerItemClickListener implements
  RecyclerView.OnItemTouchListener {
 private OnItemClickListener mListener;

 public interface OnItemClickListener {
  public void onItemClick(View view, int position);
 }

 GestureDetector mGestureDetector;

 public RecyclerItemClickListener(Context context,
   OnItemClickListener listener) {
  mListener = listener;
  mGestureDetector = new GestureDetector(context,
    new GestureDetector.SimpleOnGestureListener() {
     @Override
     public boolean onSingleTapUp(MotionEvent e) {
      return true;
     }
    });
 }

 @Override
 public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
  View childView = view.findChildViewUnder(e.getX(), e.getY());
  if (childView != null && mListener != null
    && mGestureDetector.onTouchEvent(e)) {
   mListener.onItemClick(childView,
     view.getChildPosition(childView));
  }
  return false;
 }

 @Override
 public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
 }
}

第 2 步:现在使用 onclick 方法。这为您提供了点击项目的位置。一旦获得位置而不是在该位置获得视图,您现在可以根据需要使用它。

recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(
    context, new RecyclerItemClickListener.OnItemClickListener() {

 @Override
 public void onItemClick(View view, int position) {
 // TODO Auto-generated method stub

    //find your view at clicked position here.
 CheckBox c = (CheckBox) view.findViewById(R.id.btn_tag);

 if (c.isChecked()) {
          //add your code
 } else {
          //add your code
       }
   }
  }));