android recyclerview with multi item binding
채팅 예제 하나 올려 볼라고 시작한 일이 커졌다.
기존 소스가 activity 로만 되어 있어 fragment 로 변경하고 viewbinding 을 적용해 볼려고 시작했는데
recyclerview 를 한번 정리하게 되었고
글찾아보니 제대로 동작하는 소스가 없어서 나도 하나 만들어 보았다.
이제 내가 만든 소스 기준으로 adapter 에 multi type itembindingview 를 적용해 보도록 한다.
소스의 시작은 recyclerview02 소스를 가지고 시작한다.
https://github.com/wkyoon/Recyclerview02.git
모든 내용은 동일하다. 단지 recyclerview 에 들어가는 item 의 view type 이 하나가 아니고 둘이라는게 다른 내용이다.
우선 activity_main.xml 에 있는 recyclerview 부분부터 수정한다.
tools:listitem 을 삭제한다.
single type 의 item 을 가질때는 위와 같이 xml 에 선언해서 사용하는것이 편하다.
하지만 mutil type 인 경우는 위와 같이 사용하면 안된다.
( 삭제를 하고 그냥 실행해도 결과는 똑같다. 그냥 무시해도 되는거 보다)
일단 이걸 할려고 하면
sealed class 를 알아야 한다.
inner class로 사용하는 ViewHolder 로 해결해 보고 싶었지만 그렇게 되지는 않는 것같다.
sealed class 를 별도로 만들어서 처리하는 방법을 참조하도록 한다.
그리고, 다른 예제
이게 이해 하기 제일 편할것 같다.
다른 분들건 너무 내용이 복잡하다.
sealed class 를 사용해 해야 하는 것은 이해 하겠지만 이걸 어떻게 adapter 에 적용할 건지에 대해 간단히 설명 한 내용이 없다.
적용 내용은 간단하다.
1. 기존에 inner class 로 구현한 ViewHolder 를 삭제한다.
2. sealed class 형태로 ViewHoder 를 구현한다.
나는 나이로 25세 이상이면 OLDER 를 적용 어리면 YOUNGGER 를 적용하도록 하였다.
위에 이미지를 보면 숫자가 있는데 순서라고 보면 된다.
이전 소스에는 getItemViewType 이 없었다
data 에서 정보를 가져와서 보여줄 layout 을 결정해 준다고 보면 된다.
그리고, onCreateViewHolder 를 호출한다고 보면 된다.
viewtype 이 결정되어서 넘어오니깐 그때 viewbinding 을 전달해 준다.
그리고, onBinding 에서 holder 를 보고 ( view binding 된 holder 를 보고) data를 binding 하여 setting 한다.
댓글
댓글 쓰기