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

时间:2015-08-03 03:19:01

标签: android checkbox android-recyclerview

我有一个充满了relativelayouts的recyclerview,每个都有一个textview和一个复选框。在我的recyclerview过滤器片段中,我正在实现android.widget.CompoundButton.OnCheckedChangeListener以尝试区分单击recyclelerview项目的textview,然后执行操作,这同样适用于取消检查阶段,如何实现?< / p>

由于

2 个答案:

答案 0 :(得分:1)

在onCheckedChanged中,您可以通过checkbox.getParent()从复选框中获取您的relativelayout。
然后,您可以对视图应用任何更改 如果你想要适配器中的coresspone位置,你可以通过your_recyler_view.getChildAdapterPosition(get_relative_layout)来获取 希望这会有所帮助。

答案 1 :(得分:0)

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

步骤1:Fist将此RecyclerItemClickListener类添加到您的包中。

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