<ListView>
- List를 사용하는 앱은 무엇이 있을까?
- 카카오톡 : 친구 목록, 채팅 목록
- 인스타그램 : 팔로우 목록
- 배달의 민족 : 식당 목록
- 디스코드 : 채팅
- 주소록 : 주소 목록
- 카카오톡 친구목록을 LinearLayout만으로 구현한다면 어떤 단점이 있을까?
- 추가/삭제하기가 불편하다.(복사, 붙여넣기의 반복)
- 만든 갯수만큼만 표현할 수 있다.
- List의 특징은?
- 비슷한 데이터들을 모아둔다.
- 정렬이 필요한 경우
- 추가/삭제가 용이하다.
- 공통점을 가지고 있는 데이터들을 비슷한 형태로 나타낸다.
- 나타나는 데이터가 항상 동일하지 않고 변할 수 있음.
<ListView의 구조 생각해보기>
- ArrayList
- 자주 사용되는 자료구조
- 배열에 더 다양한 기능을 추가함.
- 생성 시에 사이즈 지정을 하지 않아도 된다(c언어의 경우 미리 사이즈를 지정해야 하는 경우가 있다.), 항목의 추가와 삭제가 쉽다.
- 다양한 Type을 지원한다.
- 직접 만든 객체도 쉽게 배열로 관리할 수 있다.
- ListView에 필요한 구성요소 생각해보기
- 아이템을 담을 목록(ArrayList)
- 데이터의 총 갯수
- ListView 전체에 대한 Layout
- ListView 안의 개별 Item에 대한 Layout
- 데이터를 Layout에 표시하는 함수
- item 각각에 데이터를 가져오는 함수
- item을 위치에 따라 가져옴
- 스크롤
+) 기존 View(Layout)들은 어떤 기능이 있었나?
- LinearLayout : 정렬, weight(가중치) 설정, 방향 설정 등
- ConstraintLayout : Constraint(제약) 설정, chain 설정 등
→ 여기에 비해 ListView는 너무 많은 일을 한다. View 관리, 데이터 관리 등 ⇒ 이럴 경우 하나에 많은 것이 엮여있어서 수정이 어렵다. 느려질 수 있다.
⇒ ListView의 부담을 줄일 수 있도록 기능을 분산하자! 데이터 관리를 Adapter에게 위임!
- Adapter의 역할
- 데이터를 적절히 가공하여 View에 전달한다.(예. TextView 설정, ImageView 설정 등)
- ListView Adapter의 구성 요소
- 실제 item을 담고 있는 List(ArrayList)
- Item을 list에서 가져오는 함수
- item에 고유한 ID를 가져오는 함수(my) 인덱스 같은..?)
- ListView에서 표현할 총 Item 수를 가져오는 함수
(40분)
⇒ 그러나 최근에는 ListView를 잘 사용하지 않는다? 치명적인 단점이 있기 때문.
: 화면에 보이든 말든 view를 전부 다 만들어둔다. 그렇기 때문에 view를 재활용하는 기능을 추가한 효율적인 ListView인 RecyclerView를 사용한다.
<RecyclerView의 특징>
- View를 미리 담아놓고 재활용하는 ViewHolder 사용
- Layout의 XML 정보를 미리 해석(Inflate) 해두어 재활용
- 표현 방법을 정하는 LayoutManager 사용(반드시 설정을 해주어야 함. → a) XML에서 설정, b) kotlin 코드에서 설정)
- 선형적으로 배치하는 LinearLayoutManager
- orientation (방향) 설정을 통해 수평/수직 설정 가능
- 그리드 형태로 배치하는 GridLayoutManager
- orientation (방향) 설정을 통해 수평/수직 설정 가능
- spanCount로 행 or 열의 갯수 설정 가능
<RecyclerView Adapter의 구성>
- 실제 Item을 담고 있는 List
- ViewHolder 객체
- ViewHolder 생성 시에 수행할 작업을 작성한 함수(onCreate와 비슷함.)
- ViewHolder가 보일 때 수행할 작업(위치(position) 정보를 받는다.)
- RecyclerView에서 표현해야 할 총 아이템 수 등
<실습 - Recyvlerview 만들기>
- Recyclerview를 만들때, id를 꼭 설정해주어야 한다. → why? 어댑터 설정이라던지, 코틀린 코드에서 사용하려면 필요함.
- Adapter도 종류가 다양함.
- (관련 내용 공부 후에 다시 듣기)
'✨ 공부 기록 > Android' 카테고리의 다른 글
[스터디 3] 배운 내용 정리 (0) | 2022.11.02 |
---|---|
[Android] 새로운 Activity 만들기 (0) | 2022.10.09 |