首页 文章

如何检查在recyclerview子项中单击了哪个项目

提问于
浏览
1

recyclers子视图包含两个可点击的对象,一个是一组TextViews和ImageView,另一个是CheckBox(请参阅Android Recyclerview Multiple onclick items)我想看看是否在孩子上点击了复选框 . 如果是这样,那么我改变了CheckBox的状态 . 另外,我发起了另一项活动(结果) . 上面的链接显示了在视图持有者中处理点击次数 . 我想在我设置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)?

2 回答

  • 1

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

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

    像这样你应该有权访问 ViewHolder (不要忘记使用适配器最佳实践实现) .

    希望它有所帮助!

    最好 .

    检查一下:Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?

  • 5

    您始终可以创建一个将事件传递给活动的界面 . 所以举个例子

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

    然后你这样调用它

    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());
                    }
                    if(listener != null)
                        listener.onClick(YOUR_VIEW, POSITION);
                    return true;
                }
    

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

相关问题