Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在RecyclerView GridLayout上滚动时如何选择项目?_Android_Android Recyclerview_Scroll - Fatal编程技术网

Android 在RecyclerView GridLayout上滚动时如何选择项目?

Android 在RecyclerView GridLayout上滚动时如何选择项目?,android,android-recyclerview,scroll,Android,Android Recyclerview,Scroll,我试图实现一种像三星日历上那样的互动 我知道你必须使用触摸事件(我在Android文档中看到过),但我仍然无法进行交互 @Override public void onLongClick(View view, int position) { view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, Motio

我试图实现一种像三星日历上那样的互动

我知道你必须使用触摸事件(我在Android文档中看到过),但我仍然无法进行交互

@Override
public void onLongClick(View view, int position) {                 
  view.setOnTouchListener(new View.OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
       return false;
     }
   });
} 
}


这是我实现的侦听器

您在哪里设置了此回调?您能否提供更多的代码,至少是上面的代码,以及您在这里处理的是哪个类/视图?这可以帮助我们提供一些帮助。对不起,我在下面的答案中添加了我的代码。
public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
private GestureDetector gestureDetector;
private ClickListener clickListener;

public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
    this.clickListener = clickListener;
    gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null) {
                clickListener.onLongClick(child, recyclerView.getChildPosition(child));
            }
        }

        @Override
        public boolean onDown(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null) {
                clickListener.onDown(child, recyclerView.getChildPosition(child), e);
            }
            return true;
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            return super.onScroll(e1, e2, distanceX, distanceY);
        }
    });
}

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
    View child = rv.findChildViewUnder(e.getX(), e.getY());
    if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
        clickListener.onClick(child, rv.getChildPosition(child));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    View child = rv.findChildViewUnder(e.getX(), e.getY());
    if (child != null && clickListener != null) {
        clickListener.onTouchEvent(rv, e, rv.getChildPosition(child));
    }

}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}

public interface ClickListener {
    void onClick(View view, int position);

    void onLongClick(View view, int position);

    void onTouchEvent(RecyclerView rv, MotionEvent e, int childPosition);

    void onDown(View view, int position, MotionEvent e);

}