안드로이드 앱 개발 중 에러가 발생하는 경우는 정말 감사하다. 바로 어디가 문제인지 볼 수도, 찾아볼 수도 있기 때문이다. 하지만 뷰 구성을 할 때 에러가 안나는 경우가 많으며, 찾기도 힘들다. 이럴 때는 경험상 정상적인 사용을 하였는가를 짚어봐야 한다. 그 중 최근에 헤맸던 부분을 공유하고자 한다.
RecyclerView는 기본적으로 ViewHolder 패턴을 지원하기에 Adapter에 onBindViewHolder() 메서드를 제공하며 override로 구현해야 한다. 해당 onBindViewHolder()가 호출되지 않는 경우였는데 아래의 경우가 있다.
1. RecyclerView.Adapter.getItemCount()의 return 값이 0일 경우
2. LayoutManager 를 적용하지 않았을 경우
RecyclerView는 안드로이드에서 리스트를 활용하려 한다면 사용하는데 리스트의 아이템 관리를 LayoutManager에서 담당한다. LayoutManager를 해당 뷰에 설정해주지 않는다면, 아무리 리스트의 아이템을 바꾸거나 추가해도 변하지 않는다.
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager
적용할 수 있는 LayoutManager
LinearLayoutManager : 목록 형태의 구성
https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager
GridLayoutManager : 격자 형태의 구성, 모든 격자의 크기가 동일하다.
https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager
StaggeredGridLayoutManager : 격자 형태의 구성 : 격자마다 크기가 다르며, 배치 순서나 아이템의 배치를 변경할 수 있다.
https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager
RecyclerView에 적용하는 방법은 코드에서도, xml에서도 가능하다. 물론 좀더 custom하게 적용하려면 코드가 추가되어야 하지만 간단한 리스트의 경우 xml에 명시만 해주면 된다.
1) layout.xml에 적용
...
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_search_results"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:translationZ="2dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
...
2) 코드에서 적용
...
recyclerView.run{
layoutManager = LinearLayoutManager(context)
adapter = MyAdapter().apply {
//Add Adapter Controll
}
}
...
'안드로이드' 카테고리의 다른 글
안드로이드 크롤링(Crawling)하기 (Jsoup Library 활용) (0) | 2020.03.20 |
---|---|
안드로이드에서 주소를 좌표로 변환 하기(GeoCoder) (0) | 2020.03.19 |
Android EditText 입력창(SoftInput) 숨기는 방법 (0) | 2020.03.16 |
Android Asset 활용하기 (0) | 2020.03.10 |
다른 앱의 알림(Notification) 내용 가져오는 방법(알림 접근) (1) | 2020.03.09 |