【问题标题】:How to get specific view checkbox from RecyclerView?如何从 RecyclerView 获取特定视图复选框?
【发布时间】:2015-08-05 16:58:49
【问题描述】:

我有一个recyclerview,里面装满了relativelayouts,每个都有一个textview和一个checkbox。在我的 recyclerview 过滤器片段中,我正在实现 android.widget.CompoundButton.OnCheckedChangeListener 以尝试区分单击了 recyclerview 项的哪个 textview,然后执行一个操作,这同样适用于取消选中阶段,如何实现?

谢谢

【问题讨论】:

    标签: android checkbox android-recyclerview


    【解决方案1】:

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

    【讨论】:

    • 还是想不通,你有示例代码吗?
    【解决方案2】:

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

    第 1 步:首先将此 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
           }
       }
      }));

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2016-02-20
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多