[안드로이드] RecyclerView [2] OnItemClick 리스너 구현
[안드로이드] RecyclerView [2] OnItemClick 리스너 구현
RecyclerView 에서는 ListView에서와는 다르게
ClickListener 를 따로 구현해서 등록해줘야합니다.
Adapter에서 OnClick 를 구현해줘도 되고 제가 구현한 방법 처럼 따로 클래스를 만들어서
ItemTouchListener 를 구현해도 됩니다.
1. Result
2. Step by Step
2-1. RecyclerView 구현
안드로이드 RecyclerView 의 간단한 구현 방법은 이전 포스팅 글로 대체 하겠습니다.
[[안드로이드] RecyclerView 간단한 사용법]
2-2. OnItemTouchListener
RecyclerItemClickListener.java
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(View view, int position);
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) {
Log.d("long","press");
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;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
@Override public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}
2-3. addOnItemTouchListener
mainBinding.recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), mainBinding.recyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(getApplicationContext(),position+"번 째 아이템 클릭",Toast.LENGTH_SHORT).show();
}
@Override
public void onLongItemClick(View view, int position) {
Toast.makeText(getApplicationContext(),position+"번 째 아이템 롱 클릭",Toast.LENGTH_SHORT).show();
}
}));
3. Soruce code
전체 소스 코드는 Github 에 연동해놨습니다.
MainActivity에서 Data Binding을 사용하였습니다.
[Recycler View 시리즈]
2017-04-26 09:00 +0900
Read other posts