일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- viewholder
- ui test
- IntentTestRule
- 코틀린
- ActivityTestRule
- Fragment에서 Activity의 함수 사용하기
- Android
- recyclerview
- 고차함수
- 구분선
- Error:Execution failed for task ':app:mergeDebugResources'
- fragment
- high order function
- adapter
- espresso
- binding adapter
- searchview
- 코딜리티
- 안드로이드개발레벨업교과서
- 안드로이드스튜디오
- 리사이클러뷰
- 테마 아이콘
- 안드로이드13
- 뷰변경 감지
- 재사용
- 스와이프
- Fragment 수동 추가
- 생명주기
- 안드로이드
- LayoutManger
- Today
- Total
룬아님의 취중코딩
3. 안드로이드 개발 레벨업 교과서 (RecyclerView) 본문
RecyclerView
RecylerView는 몇 가지 부품으로 구성됩니다. RecyclerView를 이용하려면 최소한 Adapter와 ViewHolder를 만들 필요가 있습니다. LayoutManager라는 레이아웃을 관리하는 클래스는 기본으로 몇 가지 준비돼 있으므로 보통은 그 클래스를 이용합니다.
RecyclerView.Adapter
RecyclerView.Adapter를 상속하는 클래스를 만들어 사용합니다. View를 만들고, 표시되는 View와 데이터를 연결합니다.
RecyclerView.ViewHolder
일반적으로 Adapter 내에서 RecyclerView.ViewHolder를 상속하는 클래스를 만듭니다. ViewHolder는 View에 대한 참조를 유지합니다. Adapter의 onCreateViewHolder() 메서드로 ViewHolder의 인스턴스를 생성해서 반환합니다. 그리고 onBindViewHolder() 메서드로 ViewHolder에 설정한 View에 데이터를 설정합니다. ViewHolder의 멤버 변수에 View를 저장해 둠으로써 findViewById()를 매번 실행할 필요하 없어지고 성능이 향상됩니다.
RecyclerView.LayoutManager
레이아웃 매니저는 RecyclerView에서 View의 위치와 크기를 결정하고 View의 재사용 규칙을 관리합니다. RecyclerView에는 다음과 같은 3가지 레이아웃 매니저가 있습니다.
- LinearLayoutManager : 기본으로 아이템을 한 줄로 나열합니다.
- GridLayoutManager : 아이템을 격자(Grid) 형태로 나열합니다.
- StaggeredGridLayoutManager : 크기가 일정하지 않은 아이템을 격자 형태로 나타냅니다.
RecyclerView 레이아웃을 만드는 흐름
ViewGroup구조로 RecyclerView에서 onLayout() 메서드를 호출해 LayoutManager에 처리를 맡깁니다. LayoutManager는 필요해진 아이템의 ViewHolder를 Adapter로부터 가져오고, Adapter에서 ViewHolder에 필요한 데이터를 설정하게 됩니다.
뷰의 재사용
RecyclerView에서는 View를 목록으로 표시합니다. RecyclerVIew에서는 스크롤해서 필요 없어진 View를 ViewHolder로서 Scrap 리스트에 추가합니다. 그리고 스크롤로 ViewHolder 안의 View에 Adapter로 데이터를 설정하고, 다음으로 필요해진 View를 꺼내 표시합니다.
* RecyclerView 자체의 크기가 변하지 않는 것을 알고 있을 때 이 옵션을 설정하면 성능이 개선됩니다.
recyclerView.setHasFixedSize(true);
https://developer.android.com/training/custom-views/optimizing-view.html
위 링크는 requestLayout을 호출하는 것이 비용이 많이 드는 이유를 설명합니다. 기본적으로 항목이 삽입, 이동 또는 제거 될 때마다 RecyclerView의 크기 (너비 및 높이)가 변경 될 수 있으며 뷰 계층의 다른보기 크기가 변경 될 수 있습니다. 항목이 자주 추가되거나 제거되는 경우 특히 문제가됩니다.
그렇기 때문에 RecyclerView에서 항목을 추가하거나 제거 할 때 setHasFixedSize를 true로 설정하면 높이 또는 너비가 변경되지 않을 때 불필요한 레이아웃 과정을 피할 수 있습니다.
'개발 > 안드로이드 개발 레벨업 교과서' 카테고리의 다른 글
2-2. 안드로이드 개발 레벨업 교과서 (View) (0) | 2019.08.18 |
---|---|
2. 안드로이드 개발 레벨업 교과서 (Activity) (0) | 2019.08.16 |
1. 안드로이드 개발 레벨업 교과서 (안드로이드 스튜디오) (0) | 2019.08.07 |