RecyclerView를 이해하기에 앞서
AdapterView를 알고 있어야 한다.
왜냐하면 나는 RecyclerView를
AdapterView의 확장판쯤으로 이해했기 때문이다.
1. AdapterView
AdapterView는 많은 데이터를
하나의 뷰로 보여주기 위해 만들어진 뷰이다.
즉, 여러 항목을 보여주는 뷰이다.
많은 데이터를 View로 보여주기 위해
Adapter라는 것을 사용하기 때문에
지어진 이름이지 않을까 싶다.
1) 구성요소
AdapterView에 대한 정의를 내린것에서
구성요소를 추출할 수 있다.
"항목을 보여준다"
항목을 보여준다는 표현에서 알 수 있듯
데이터로 구성되어 있는 하나의 요소가 존재하고
이러한 요소를 각자의 방식대로 보여주는 것이다.
즉, (1) 데이터를 (2)하나의 요소로 구성하고
여러 개의 요소들을 (3) View에 나열한다는 것이다.
위의 정의에서 볼 수 있듯 크게 3가지 구성요소로 정리할 수 있다.
(1) Data
뷰의 내용이 되는 정보
데이터 저장소
(2) Adapter
Data를 요소(Item)로 구성하여
View에서 활용 가능하도록 만드는 객체
(3) View
나름의 표현방식으로 Item을 보여주는 View
2) 여전히 정의되지 않은 Adapter
위의 내용처럼 정리를 해보니
Data와 View의 역할을 뚜렷한데
Adpater는 그래서 뭘 하겠다는 건지
여전히 정리가 잘 안 돼서
다시 세부적으로 정리했다.
Adapter는 정보를 가공하여
하나의 View(item)를 만든다.
Adpater가 만든 View는
(3) View의 하나의 항목이 된다.
- Adapter가 알고 있어야 하는 것
(1) Data가 무엇인지 알고 있어야 한다.
(2) 어떤 형태로 item을 구성할지 layout을 알고 있어야 한다.
(3) Data와 layout을 매핑할 수 있어야 한다.
(4) item도 화면에 표현하는 내용이기 때문에 Context를 알고 있어야 한다.
( 이 내용은 제가 이해하기 위해 추측을 더하여 작성한 부분이 기입니다.
실제와 다를 수 있습니다. 더 공부가 필요한 부분입니다. )
3) 예시
대표적인 AdpaterView 인 Spinner를 통해
정리한 내용이 맞는지 확인해보았다.
val spinner: Spinner = findViewById(R.id.spinner)
// Create an ArrayAdapter using the string array and a default spinner layout
// Spinner 생성
// Adapterter 생성
// (1) Context 넣음
// (2) 리소스에서 R.array.planets_array 배열을 데이터로 넣음
// (3) item layout 넣음
ArrayAdapter.createFromResource(
this,
R.array.planets_array,
android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Spinner에 adapter 연결
spinner.adapter = adapter
}
출처: 공식문서 [developer.android.com/guide/topics/ui/controls/spinner?hl=ko]
ArrayAdapter의 생성 파라미터를
통해 확인할 수 있듯
Adapter는 컨텍스트가 무엇인지,
데이터가 무엇인지,
item은 어떤 레이아웃을 사용할지를 알고 있다.
ArrayAdapter는 배열 형식의 데이터를
안드로이드 기본 layout에 매칭 할 수 있다.
4) 기존 AdapterView의 한계는?
Spinner나 ListView (Legacy)와
같은 AdapterView에서는
매번 Item을 만들 때마다 Inflating을 해야 한다.
xml을 객체로 만드는 과정인데 수많은 요소들을
반복해서 View를 만드는 것은 리소스 낭비이며
부하를 일으킨다고 한다.
5) RecyclerView는 한계를 해결했는가?
화면에 보이는 View는 어차피 한정되어있다
예를 들어 500개의 항목을
보여주는 View가 있다고 하더라도
한 화면에서 볼 수 있는 항목이 10개라고 하면
Item을 10개만 생성해놓고
Item안의 데이터만 변경하는 방식으로
재사용하면 되는 것이다.
이러한 컨셉으로 도입된 것이 ViewHolder이고
이를 강제화한 것이 RecyclerView이다.
이어지는 글 : [Android] RecyclerView 이해하기 (2) - ViewHolder는 무엇인가
도움이 되었다면
로그인이 필요 없는 공감 버튼 꾹 눌러주세요!
'Mobile 개발 > 재미있는 Android' 카테고리의 다른 글
[Android] WebView 설정 모아보기 (1) | 2020.11.20 |
---|---|
[Android] Retrofit을 쓰자 - 기본적인 사용 방법 (0) | 2020.11.19 |
[Android] RecyclerView 이해하기 (2) - ViewHolder는 무엇인가 (0) | 2020.09.17 |
[Android] 이벤트 쉽게 풀어서 이해하기 (0) | 2020.02.13 |
[팁] FileUriExposedException : 안드로이드 카메라 인텐트 에러 (0) | 2017.11.22 |