如何从RecyclerView获取/点击特定视图?

时间:2015-02-22 23:33:55

标签: android list touch adapter android-recyclerview

我有一个包含物品清单的RecyclerView。每个项目都是一个包含四个文本视图的RelativeLayout。我想要做的是能够区分单击列表项的哪个文本视图,然后基于此执行操作。

现在我正在使用

final GestureDetector mGestureDetector = new GestureDetector(MyShiftsPageFragment.this.getActivity(), new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });
    shiftList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
            ViewGroup child = (ViewGroup) recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());

            if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
                Log.i(TAG, child.toString());
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
            Log.i(TAG, "TouchEvent");
        }
    });

但它似乎找到的只是RelativeLayout,而不是该布局之上的单个组件。有任何想法吗?或者我应该采用不同的方式来做这件事?

1 个答案:

答案 0 :(得分:2)

以下是我放在一起的样本中的一些代码,事件似乎正确触发。

    public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener, OnCheckedChangeListener {

        private CheckBox mCheckBox;

        public ViewHolder(View itemView) {
            super(itemView);
            mCheckBox = (CheckBox) itemView.findViewById(R.id.checkBox1);
            mCheckBox.setOnCheckedChangeListener(this);
            itemView.setOnClickListener(this);
        }

        public CheckBox getCheckBox() {
            return mCheckBox;
        }

        @Override
        public void onClick(View v) {
            Log.d("CustomAdapter.ViewHolder", "item onClick()");
        }

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            Log.d("CustomAdapter.ViewHolder", "checkbox onCheckChanged()");
        }

    }

当然,您不必让ViewHolder实现侦听器接口,您可以根据需要创建侦听器。