RecyclerView itmeクリックイベントと長押しイベント、onItemLongClick、onItemClick
3112 ワード
RecyclerViewはlistviewよりも強力であることはよく知られていますが、現在では多くのandroid開発者がlistviewの代わりにRecyclerViewを使用しています.しかし、使用を開始したばかりの頃は、RecyclerViewがクリックイベント(onItemClick)とロングクリックイベント(onItemLongClick)を持っていないという問題に直面していると信じていました.
ここで自分の書き方を共有し、接触したばかりの開発者の一部に役立つことを望んでいます.
1つ目の方法:
OnItemTouchListenerでクリックインタフェースをカスタマイズします.次のように
Activity統合インタフェースOnItem 2 clickListenerで、メソッドを実装します.
}
第2種
adapter種実装インタフェースの具体的な実装では、私の以前の別の文章を見ることができます.
https://blog.csdn.net/qq_36355271/article/details/86242606
//activityはadapterのインタフェースを実現することで制御効果を達成した.
ここで自分の書き方を共有し、接触したばかりの開発者の一部に役立つことを望んでいます.
1つ目の方法:
OnItemTouchListenerでクリックインタフェースをカスタマイズします.次のように
/**
*
*/
public class RecyclerViewClickListener implements RecyclerView.OnItemTouchListener {
// GestureDetectorCompat
private GestureDetectorCompat mGestureDetector;
private OnItem2ClickListener mListener;
//
public interface OnItem2ClickListener {
//
void onItemClick(View view, int position);
//
void onItemLongClick(View view, int position);
}
public RecyclerViewClickListener(Context context, final RecyclerView mRecyclerView, OnItem2ClickListener listener) {
this.mListener = listener;
// SimpleOnGestureListener
mGestureDetector = new GestureDetectorCompat(context, new GestureDetector.SimpleOnGestureListener() {
//
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.i("mGestureDetector","onSingleTapUp");
View childViewUnder = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childViewUnder != null && mListener != null) {
mListener.onItemClick(childViewUnder, mRecyclerView.getChildLayoutPosition(childViewUnder));
return true;
}
return false;
}
//
@Override
public void onLongPress(MotionEvent e) {
Log.i("mGestureDetector","onLongPress");
View childView = mRecyclerView.findChildViewUnder(e.getX(),e.getY());
if(childView != null && mListener != null){
mListener.onItemLongClick(childView,mRecyclerView.getChildLayoutPosition(childView));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
// mGestureDetector
if(mGestureDetector.onTouchEvent(e)){
return true;
}else
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
Activity統合インタフェースOnItem 2 clickListenerで、メソッドを実装します.
public class MessageFragment extends BaseFragment implements RecyclerViewClickListener.OnItem2ClickListener{
@Override
public void onItemClick(View view, int postion) {
}
@Override
public void onItemLongClick(View view, int position) {
}
}
第2種
adapter種実装インタフェースの具体的な実装では、私の以前の別の文章を見ることができます.
https://blog.csdn.net/qq_36355271/article/details/86242606
//activityはadapterのインタフェースを実現することで制御効果を達成した.