【发布时间】:2016-12-21 11:38:02
【问题描述】:
我正在尝试在我的 RecyclerView 上添加 RecyclerItemClickListener。它工作正常,事情是我的 RecyclerView 中的 2 个组件需要双击才能执行它们的 onClick 操作。
这是我的 MainActivity 中的 recyclerView.addOnItemTouchListener:
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, final int pos) {
TextView sourceName = (TextView) view.findViewById(R.id.sourceName);
ImageView moreSettings = (ImageView) view.findViewById(R.id.moreSettings);
// Add on click listeners
sourceName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initiateDialogAlert(passObjArrayList.get(pos).getName(), passObjArrayList.get(pos).getPassword());
boiteAlerte.show();
}
});
moreSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
createPopupMenu(view, pos);
}
});
}
});
如何防止这种需要在组件上单击两次才能执行其操作的行为?
我的 RecyclerItemClickListener:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
public void onLongItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = 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 && mListener != null) {
mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
return true;
}
return false;
}
public static boolean isViewClicked(View view, MotionEvent e) {
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
return rect.contains((int) e.getRawX(), (int) e.getRawY());
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}
【问题讨论】:
标签: android android-recyclerview onitemclick