써야지 써야지 하고 다른 일을 하느라 조금 늦었다...
오늘 이 시간에는 RecylcerView의 View를 구현하기는 했는데 ListView 처럼 Item Click Event를 어떻게 핸들링하는지 다루어 보도록 하겠다~!!!
이번 내용은 도움이 많이 될 것 이다. 꿀이거든 꿀...
늘 그래왔듯이 중요한 점을 키워드로 정리를 하자!!
Item 을 누르는 행위는 크게 Click 과 Touch 2가지로 분류된다. 구별이 잘 안가는 사람을 위해 조금 설명을 하자면
Click은 손을 눌렀다가 뗄 때 인지되는 것이고, Touch는 누를 때, 뗄 때 모두 인지되는 것이다.
RecyclerView에서 항목(Item)을 클릭하거나 터치하여 게시판처럼 다른 Activity로 넘어가거나 어떤 것을 눌렀는지 Toast를 띄우기 위해서는
총 두가지의 방법이 존재한다.
(1) RecyclerView.OnItemTouchListener 사용
(2) ItemClickSupport Class 작성
그리고 Item 안의 Event를 핸들링 해야 할 경우, 즉, 항목별로 버튼이 달려있어서 거기에도 아이템 리스너 말고 따로 리스너를 달아줘야
할 경우 Adapter 구현 할 때, OnBindViewHolder에서 이벤트 핸들러를 달고싶은 Component(Button이나, TextView 같은...)에 OnClickListener와 같은
리스너를 달아주면 된다.
정확한건 코드를 보면서 설명을 시작해야겠지...
1. RecyclerView.OnItemTouchListener 사용하기
요녀석을 구현하기 위해서 다시 2가지가 필요한데 GestureDetector라는 녀석과, RecyclerView.OnItemTouchListener를 커스터마이징 한 녀석이다.
그럼 시작해보자.
1) GestureDetector
이녀석이 필요한 이유는 Touch의 개념이 누를 때, 뗄 때 모두 인식이 되는 것 때문이다.
아이템을 클릭하는 이벤트를 처리하기 위해서 누를 때는 인식하지 않다가 뗄 때 한번만 인식하게 만들어 주려고 GestureDetector를 사용하는것이다.
요렇게 구현을 해주고, 나중에 RecyclerView.OnItemTouchListener에서 사용할꺼기 때문에 onCreate()문 위 에 변수 선언하는 공간에다가
private GestureDetector gestureDetector; 이렇게 먼저 선언하고 onCreate()문 안에서 위와 같은 코드로 초기화 해두면 된다.
2) RecyclerView.OnItemTouchListener 커스터마이징
이녀석이 하는 역할은 터치 이벤트가 발생하면 -> RecyclerView 안에서 발생한 터치 이벤트를 Intercept -> 어떤 아이템을 터치했는지, 어떤 작업을 수행 할 것 인지 정의하고 -> 정의된 대로 작업을 수행하는 것 이다.
코드를 한번 살펴보자.
주석을 보면 대략 어떤 로직으로 구성이 되었는지 알 수 있을 것 이다~!!!!!!!
그리고 RecyclerView를 초기화 할때 이 리스너를 달아주면 구현의 끝이다.
2. ItemClickSupport Class 작성
요거는 내가 즐겨보는 Code Path라는 사이트(https://guides.codepath.com/android/using-the-recyclerview#attaching-click-handlers-to-items)를 참고
해서 알게되었다.
쓰는 방법은 ItemClickSupport Class 작성 -> RecyclerView 초기화하는 부분에서 ItemClickSupport Class를 통해서 OnItemClickListener를 구현해서
setOnItemClickListener를 이용하여 리스너를 달아주면 끝이다.
1) ItemClickSupport Class
요거를 Class를 하나 새로 파서 복 to the 붙 해줘.. 그냥 복붙하면 돼...
2) RecyClerView 초기화 부분에서 리스너 구현
요렇게 달아주고 내가 원하는 리스너를 커스터마이징 하면 끝이다...
Click, LongClick 모두 설정 할 수 있으니까 아주 좋은 것이지...
요렇게 하믄!!!! Item 클릭 했을 때의 이벤트를 모두 처리 할 수 있게 되었고..
요기 위에 처럼 저렇게 아이템별로 버튼이 있어서 저 버튼에 따로 이벤트를 달아줘야 하는 경우가 생기는데 이것은 RecyclerView.Adapter 커스터마이징 한 곳에 OnBindViewHolder 부분에 처리를 해주면된다.
아래의 코드를 보면서 이해를 해보도록 하잣~!!
3. 아이템 속 Component 이벤트 처리하기
요기 보믄 OnBindViewHolder에서 OnClickListener를 통해서 버튼에 리스너를 달아준 것이 보이는가아~!! 요렇게 하믄대... 딱 느낌이 오지??? 그래 그럴 것 이야...
'Develop > Android' 카테고리의 다른 글
RecyclerView를 사용해보자아(1) (0) | 2017.02.21 |
---|---|
JSON 개념 이해 (0) | 2017.02.11 |
OkHttp 사용법 (0) | 2017.02.09 |
카카오톡 로그인 API를 사용해보자아(3) (6) | 2017.02.07 |
카카오톡 로그인 API를 사용해보자아(2) (0) | 2017.02.06 |