티스토리 뷰

Android

안드로이드 노트: 리스트뷰, 어댑터, 어댑터뷰, 겟뷰, 오버스크롤

rhys
반응형

[Android Tutorial] ListView Example





안드로이드 리스트뷰 https://developer.android.com/guide/topics/ui/layout/listview.html

여러개의 항목을 리스트 형태로, 수직으로 표시하는 위젯

화면이 좁고 손가락으로 터치하는 단말에서는 리스트뷰가 쉽고 직관적임

동질적인 자료를 나열할 때 사용 - 주소록, 설정창 등이 대표적


*위젯, Button, ImageView, FrameLayout, EditText와 같은 화면 구성요소




Data Source / Android Adapter / Adapter View

데이터를 리스트뷰로 표현하기 위해서는 세 가지 요소가 필요



어댑터

원본으로부터 얻은 데이터를 관리

어댑터뷰와 데이터 간의 연결을 제공하고 항목의 집합을 관리하는 기본적 메소드를 선언


어댑터뷰는 표시할 항목 데이터를 직접 관리하지 않고 어댑터 객체로부터 공급받음

표시할 항목의 개수가 매우 많을 수도 있고, 데이터의 원본도 다양할 수 있음

이런 복잡한 데이터를 위젯, 뷰가 직접 관리하는 것은 효율적이지 못하기 때문에 어댑터를 사용



어댑터뷰

데이터를 '직접' 관리하지 않고 어댑터로부터 공급받는 뷰, 유연성이 높다

공급받은 데이터를 화면에 한 아이템으로 보여주는 방식을 사용

리스트뷰는 그림에서 볼 수 있듯 어댑터뷰에 속함. 어댑터 뷰란, 내용이 어댑터에 의해 결정되는 뷰


ex) 리스트뷰, 스피너, 갤러리, 그리드뷰





getView() https://developer.android.com/reference/android/widget/Adapter.html#getView(int, android.view.View, android.view.ViewGroup)

Adapter가 가지고 있는 Data를 어떻게 보여줄지 정의

여기서 리턴하는 뷰가 하나의 아이템으로 디스플레이 됨

TalkBack, Contact 이미지 가져오기, 폰트, bindView, 롱클릭시 처리 등




position: 생성할 항목의 순서값

convertView: 이전에 생성된 차일드뷰

parent: 생성되는 뷰의 부모, 여기서는 리스트뷰



표시할 항목이 많을 때

어댑터와 리스트뷰는 항목 뷰를 지능적으로 관리

원본에 대한 최소한의 정보만 받아두고 씀

필요할 때만 항목뷰를 생성, 다 사용한 뷰도 버리지 않고 최대한 재활용

getView에서 convertView를 리턴하는데 이것이 재사용됨

메모리를 과다하게 사용하지 않으며 이론상 항목뷰를 무한대로 표시할 수 있다



mAdapter.setEditmode()

어댑터가 늘 원본의 변화를 감시하고 있지는 않음

원본 다시 읽고, 뷰를 생성하여 리스트뷰로 재공급



mAdapter.notifyDataSetChanged()

작업중 원본이 변경되더라도 리스트뷰에는 당장 변화가 나타나지 않음. 어댑터가 아직 이 사실을 모르기 때문

원본을 변경했다면 notifyDataSetChanged를 호출하여, 참조중인 원본데이터가 변경되었음을 알려야 함

그러면 어댑터는 데이터를 다시 읽고 생성한 뷰를 재공급



OverScroll https://developer.android.com/reference/android/widget/OverScroller.html

스크롤 범위를 넘어갔을 때의 처리옵션, 오버스크롤

안드로이드 2.3부터 지원, 각 제조사는 다른 방식으로 오버스크롤을 표현(애플의 바운스백)



반응형

댓글