Android 在RecyclerView GridLayout上滚动时如何选择项目?
我试图实现一种像三星日历上那样的互动 我知道你必须使用触摸事件(我在Android文档中看到过),但我仍然无法进行交互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
@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);
}