11
Android에서 RecyclerView를 사용하기 시작했습니다. 어댑터에 터치 리스너를 구현하기 전까지는 문제가 없습니다. 이 주제에서RecyclerView의 OnLongItemClick
: 내가 제대로 childview에 대한 리스너를 구현할 수
https://stackoverflow.com/a/26826692/2923403
. 그러나 OnItemClick과 OnItemLongClick을 모두 구현하고 싶습니다. 그런 다음 문제가 나타납니다. 그들은 항상 동시에 해고됩니다. 먼저 OnItemClick 및 OnItemLongClick 나중에 내 함수를 쓸모 렌더링합니다. 여기 는 (푸 아드에 위의 코드를 기반으로, 감사) 내 사용자 정의 리스너에 대한 코드입니다public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public static interface OnItemClickListener {
public boolean onItemClick(View view, int position);
public void onItemLongClick(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 childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null) {
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}
@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.getChildPosition(childView));
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
그리고 구현을 위해 :
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public boolean onItemClick(View view, int position) {
//This is fired 1st
}
@Override
public void onItemLongClick(View view, int position) {
//This comes later
}));
가 있습니까 당신은 그것에 대해 어떤 해결책을 가지고 있습니다 ?
Hi.It 여전히 당신이 당신의 재활용보기에서 (사용 안 함) onTouch 리스너를 제거 했 내 경우 – Souris
에 동시에 발사 두 이벤트처럼 보인다 알아? 너는 필요 없어. 액티비티 나 프래그먼트에서'RecyclerViewAdapter.OnItemClickListener'와'RecyclerViewAdapter.OnItemLongClickListener'를 구현하고 각각의 인터페이스 메쏘드를 오버라이드하면됩니다 –
고마워요. 그것은 작동합니다. 나는 해결책을 받아 들였다. : D – Souris