1. RecyclerView를 구성하는 cardView에 각각 리스너 달아주기
- Adapter에서 onBindViewHolder 메소드나 ViewHolder 클래스에서 리스너 등록
- 같은 원리로 cardView 내의 버튼에만 리스너를 다는 등 할 수 있음
http://kingpiggylab.tistory.com/130 참고
2. RecylclerView 자체에 리스너를 등록
- addOnClickListener(리스너)로 등록
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; 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) { 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) { } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | mRecyclerView.addOnItemTouchListener( new RecyclerItemClickListener(getApplicationContext(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(getApplicationContext(),position+"번 째 아이템 클릭",Toast.LENGTH_SHORT).show(); switch (position){ case 0: break; case 1: break; case 2: break; } } @Override public void onLongItemClick(View view, int position) { Toast.makeText(getApplicationContext(),position+"번 째 아이템 롱 클릭",Toast.LENGTH_SHORT).show(); } })); | cs |
728x90
'# App > Android(JAVA)' 카테고리의 다른 글
[안드로이드 스튜디오] View를 동적으로 생성하기 (자바에서 생성) (0) | 2018.11.17 |
---|---|
[안드로이드 스튜디오] ProgressBar 색상 지정하기, 무한 원돌리기 (0) | 2018.11.11 |
[안드로이드 스튜디오] 항상 밑에 있는 뷰 만들기 (0) | 2018.11.11 |
[안드로이드 스튜디오] RecyclerView 삭제 버튼 만들기 (0) | 2018.11.11 |
[안드로이드 스튜디오] 나만의 툴바 만들기 (0) | 2018.11.10 |
[안드로이드 스튜디오] 프로젝트 생성 후 렌더링 오류 (0) | 2018.10.31 |
[안드로이드 스튜디오] StopWatch 스탑워치 만들기 (1) | 2018.10.26 |