OnTouchEvent for RecylerView及其项目

时间:2017-01-31 17:40:54

标签: java android android-recyclerview

简单地说,我有一个RecyclerView(一个ViewGroup)应该响应TouchEvent,而我还假设它的项目可以单独响应TouchEvent。

然而,这对我来说似乎是不可能的。例如,如果我在onTouchEvent()方法中同时使用,那么如果项目(子视图)在ACTION_DOWN时返回true,则ViewGroup无法捕获它,而如果false ,孩子自己无法回复ACTION_MOVEACTION_UP

我也转向addOnItemTouchListener() onInterceptTouchEvent(),但都没有效果。

2 个答案:

答案 0 :(得分:0)

您还可以在回收器视图行的任何元素上使用单击侦听器而不是触摸侦听器...

答案 1 :(得分:0)

问题不明确。但根据我的理解,您希望同时获得整个视图以及每个项目的点击事件。

获取整个视图的点击事件

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            // this will be called multiple times for single click - for MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP, and MotionEvent.ACTION_MOVE
            // So restricting the call only for ACTION_DOWN,
            if(e.getAction() == MotionEvent.ACTION_DOWN) {
                Toast.makeText(mContext, "Clicked view", Toast.LENGTH_LONG).show();
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {}

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
    });

并获取每个项目的click事件,在onBindViewHolder函数中添加click侦听器

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    holder.item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(mContext, "Clicked Item", Toast.LENGTH_LONG).show();
        }
    });
}