Android 如何检查在recyclerview子项中单击的项目

Android 如何检查在recyclerview子项中单击的项目,android,android-recyclerview,Android,Android Recyclerview,recyclers子视图包含两个可单击的对象,一个是一组TextView和ImageView,另一个是复选框 (参考-) 我想看看孩子身上是否点击了复选框。如果是,那么我将更改复选框的状态。 否则,我将启动另一项活动(以获得结果)。上面的链接显示视图保持架中的处理单击。我想在我正在设置RecyclerView的另一个活动中处理点击 //the view needs a listener final GestureDetector mGestureDetector = new Ge

recyclers子视图包含两个可单击的对象,一个是一组TextView和ImageView,另一个是复选框 (参考-) 我想看看孩子身上是否点击了复选框。如果是,那么我将更改复选框的状态。 否则,我将启动另一项活动(以获得结果)。上面的链接显示视图保持架中的处理单击。我想在我正在设置RecyclerView的另一个活动中处理点击

    //the view needs a listener
    final GestureDetector mGestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {

        @Override public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

    });


    mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
            View child = recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY());

            if(child!=null && mGestureDetector.onTouchEvent(motionEvent)){

                if(child.getId() == R.id.chk_box_pin){
                        //checking, this didn't work
                }
                else {
                    TextView idView = (TextView) child.findViewById(R.id.note_id_txt_vw);
                    if (DEBUG) Toast.makeText(getActivity(),
                            "ID is " + idView.getText().toString(), Toast.LENGTH_SHORT).show();
                    startEditNoteActivity(ActivityContract.ACTIVITY_EDIT, idView.getText().toString());
                }
                return true;
            }

            return false;
        }

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

        }
    });

是否有一种方法可以处理活动(而不是ViewHolder)中一个子项中多个项目的单击?

您始终可以创建一个将事件传递给活动的界面。 比如说

public interface ChildItemClickListener { 
    public void onClick(View v, int position);
}
然后在适配器中

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
   /* your code*/
   ...
   private ChildItemClickListener listener;
   ...
   */
   public void setChildItemClickListener(ChildItemClickListener listener) {
       this.listener = listener;
   }
}

就是这样:)希望它有帮助,祝你好运

你总能创建一个界面,将事件传递给活动。 比如说

public interface ChildItemClickListener { 
    public void onClick(View v, int position);
}
然后在适配器中

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
   /* your code*/
   ...
   private ChildItemClickListener listener;
   ...
   */
   public void setChildItemClickListener(ChildItemClickListener listener) {
       this.listener = listener;
   }
}

那就是:)希望它有帮助,祝你好运

不幸的是,你必须实现自己的侦听器来与你的活动进行交流

创建接口,在活动中实现它,在适配器上传递接口实例(在接口上转换上下文),并使用自定义参数调用自定义方法

这样,您应该可以访问您的
ViewHolder
(不要忘记使用适配器最佳实践实现)

希望对你有帮助

最好的


选中此项:

不幸的是,您必须实现自己的侦听器才能与活动进行通信

创建接口,在活动中实现它,在适配器上传递接口实例(在接口上转换上下文),并使用自定义参数调用自定义方法

这样,您应该可以访问您的
ViewHolder
(不要忘记使用适配器最佳实践实现)

希望对你有帮助

最好的


检查此项:

谢谢您的回复!!这很有帮助,但我不确定您希望我如何调用activity X上的内容(我在这里定义了recyclerview click侦听器)。我知道,如果我将大部分代码迁移到适配器,这是可以做到的,但这会打破代码模块化。我们不希望:)你能用一个小例子详细说明一下吗?那太好了。谢谢你的回复!!这很有帮助,但我不确定您希望我如何调用activity X上的内容(我在这里定义了recyclerview click侦听器)。我知道,如果我将大部分代码迁移到适配器,这是可以做到的,但这会打破代码模块化。我们不希望:)你能用一个小例子详细说明一下吗?那太好了。我已经对它进行了投票,但这无助于让您从activity/fragment而不是Adapter管理RecyclerView子项的单击。假设我将imageButton作为子视图,并在单击子视图时为两个视图(父视图-整行和子视图-imageButton)设置clickListeners,它将触发这两个视图的事件,因为这两个方法都将View作为输入参数,所以在imageButton(子视图)旁边单击整个视图。我已经找到了从mainactivity而不是从adapter:)使两者都工作的方法。在activity中,只需检查视图。getId()=R.id.btnid in if块,并执行按钮单击必须执行的操作,在else块中执行整行单击必须执行的操作。:)我已经对其进行了升级,但这无助于让您从activity/fragment而不是Adapter管理RecyclerView子项的单击。假设我将imageButton作为子视图,并在单击子视图时为两个视图(父视图-整行和子视图-imageButton)设置clickListeners,它将触发这两个视图的事件,因为这两个方法都将View作为输入参数,所以在imageButton(子视图)旁边单击整个视图。我已经找到了从mainactivity而不是从adapter:)使两者都工作的方法。在activity中,只需检查视图。getId()=R.id.btnid in if块,并执行按钮单击必须执行的操作,在else块中执行整行单击必须执行的操作。:)