안녕하세요 골드입니다.
오늘은 요즘 안드로이드에서 밀고 있는 RecyclerView에 대해서 알아보겠습니다.
RecyclerView는 대량의 데이터 세트를 스크롤 목록으로 표시할 때 사용합니다.
RecyclerView는 기존의 ListView와 매우 유사하지만, ListView가 더욱 진보하고 유연해진 버전이라고 합니다.
최근 구글에서도 리스트 형식의 UI를 구현할땐, ListView보다 RecyclerView를 사용하라고 권고하고 있는데요.
어떤 부분이 ListView보다 진보되었고 유연했는지 먼저 알아보겠습니다.
ListView의 경우 기본적으로 구현했을 때 리스트 항목이 갱신될 때마다, 매번 아이템 뷰를 새로 구성한다는 단점이 있습니다. 대량의 데이터를 표시하는 상황에서 이는 성능을 저하시키는 요인이 될 수 있습니다.
물론, 선택적으로 ViewHolder 객체를 사용하여 성능 저하 문제를 해결할 수 있지만, 말 그대로 선택적입니다.
또한, 다양한 상황을 해결하기 위해서는 코드 작성에서 고려해야하는 상황이 많아지고 복잡해지기 마련입니다.
여기서 다양한 상황에 한 예를 들자면, 리스트 뷰는 수직적인 구현이 기본입니다.
하지만 RecyclerView는 LayoutManager를 사용해서 상황에 따라 선택이 가능합니다.
1. 라이브러리 추가
그럼 이제 RecyclerView를 사용하기 위한 라이브러리를 추가하겠습니다.
App build.gradle에 dependencies에 v7 라이브러리를 추가합니다.
혹시 오류가 난다면 compileSDK와 버전을 맞춰주세요.
2. activity_main.xml에 RecyclerView 추가
레이아웃에 RecyclerView를 유일한 뷰로 사용합니다.
RecyclerView는 2차원적으로 데이터를 배치할 수 있습니다.
여기서는 scrollbar를 vertical로 지정합니다.
그렇게 하면 단순 ListView를 구현할 수 있습니다.
3. item을 위한 레이아웃 생성
item들이 어떻게 보일지 결정하는 xml 파일을 새로 만듭니다.
간단하게 TextView를 하나 추가했습니다.
용도에 맞게 레이아웃을 설정합니다.
4. Adapter 추가
RecyclerView도 ListView와 마찬가지로 Adapter 클래스를 정의하여야 합니다.
RecyclerView.Adapter 객체는 항목의 뷰를 만들고 원래 항목이 더 이상 표시되지 않을 때, 일부 뷰의 콘텐츠를 새로운 항목으로 교체합니다.
먼저 RecyclerViewHolder는 RecyclerView Group안에 아이템 각각의 데이터를 보여주기 위함입니다.
RecyclerView.ViewHolder 상속받으며, 객체에 저장되어 화면에 표시되고, 필요에 따라 재활용됩니다.
onCreateViewHolder에서는 레이아웃을 inflate해서 custom 레이아웃을 참조합니다.
앞서 말한대로 참조한 뷰를 RecyclerViewHolder객체에 저장합니다.
실제로 아이템에 데이터를 바인딩하는 onBindViewHolder입니다.
ViewHolder 객체에서 참조한 textView객체에 데이터를 넣습니다.
5. MainActivity.class에 RecyclerView 참조
앞서 activity_main.xml 파일에서 생성한 RecyclerView를 참조합니다.
RecyclerView에 요소들을 추가합니다. Adapter와 LayoutManager를 반드시 설정해줘야 합니다.
뷰홀더는 이미 Adapter에서 정의하였고, Adapter를 적용합니다.
여기서 layoutManager는 별 다른 작업을 하지 않았습니다. 단순히 LinearLayoutManager를 사용해서
수직 형태로 ListView와 동일한 형식으로 만들었습니다.
이제 플레이 합니다.
잘 생성된 모습을 볼 수 있습니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : https://recipes4dev.tistory.com/154
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko
'Mobile > Android(Java)' 카테고리의 다른 글
[Android/java] Camera 사용하기 (동적으로 ImageView 만들어서 Layout에 삽입하기) (0) | 2020.03.23 |
---|---|
[Android/java] AlertDialog.Builder를 통한 Custom Dialog 만들기 (0) | 2020.03.14 |
[Android/java] Options Menu 만들기 (0) | 2020.03.04 |
[Android/java] Retrofit2를 이용한 JSON 데이터 HTTP 통신(GET, POST) 방법 (CLEARTEXT 오류 해결) (0) | 2020.03.01 |
[Android/java] TabLayout과 ViewPager 안에 Fragment 사용하기 (2) | 2020.02.25 |