RecyclerView 만들기

김재현·2023년 5월 19일
1

안드로이드

목록 보기
8/12

리사이클러뷰란?

-> 다른 참고자료가 많기 때문에 여기선 리사이클러뷰를 내가 어떻게 만들었는지 적어보고자한다.

리사이클러뷰를 만들기 위해서는 다음과 같은 순서로 만든다.

1. activity_main.xml에 리사이클러뷰 위치 잡기

화면 상에 내 리사이클러뷰가 어디로 위치하면 좋을지 만들어 놓는다. 기본적인 View를 그린다고 생각하면 될거같다. 여기서 적은 id를 토대로 MainActivity에서 데이터를 넣어줄것이기때문에 id는 적어주자.

2. RecyclerView Layout그리기

실제 RecyclerView엔 어떤 모양의 레이아웃이 들어가는지 정의하는 xml파일이 필요하다. 보통 item_이름.xml 파일로 만들어서 얘가 RecyclerView나 ViewPager2의 아이템 레이아웃이라는 것을 쉽게 파악하게끔 이름짓는다.

이렇게 만든 레이아웃이 계속 반복되어서 만들어지는 것이다.
실제로 내가 데이터를 넣어줄 부분엔 android:id를 적어서 나중에 MainActivity나 다른 코드 부분에서 사용할 수 있게 해주자.이런 식의 모양이 수평/수직으로 게속 만들어질 것이다.
원하는 모양이 어떤식으로 나오는지 궁금하면 맨상위 레이아웃에
xmlns:tools="http://schemas.android.com/tools" namespace를 만들어서 tools:속성을 사용할 수 있다.

3. 데이터 준비하기

2번에서 만든 layout에 들어갈 데이터가 필요하다.

지금은 MainActivity의 onCreate()에 만들어보자.
Api나 DB로 데이터를 불러오는게 아니라면 보통 이런식으로 데이터를 만들것이다.
실제로 들어가는 데이터 종류가 많아질수록 데이터를 집어넣는 과정이 귀찮아 지기때문에 Data만 따로 있는 클래스를 만들어서 사용한다.

데이터를 만든것을 한곳에 모아두면 된다. ArrayList나 List나 MutableList나 원하는거 아무거나 만들어도 됀다.

Api나 DB로 불러올때쯤이면 MVVM패턴을 적용하여 ViewModel에서 데이터를 준비해야할것이다.

4. RecyclerView의 Adapter만들기

RecyclerView의 위치, RecyclerView의 모양, RecyclerView에 들어갈 Data를 만들었으면 이제 RecyclerView의 위치를 토대로 어떤 방식으로 들어갈것인지, 무슨 데이터를 서로 연결해줄것인지 Adapter 클래스를 만들어주어야 한다.

그럼 이때부터 class안에 들어갈게 많아지는데 클래스가 RecyclerView.Adapter<T>를 상속받아서 구현된다는 것을 알아두자. RecyclerView.Adapter를 상속받으면 기본적으로 3개의 함수를 override로 재정의 할 수 있다. 이부분은 자동완성으로 만들어질 것이다.
하지만 이 3개 이외에 ViewHolder라는 것을 내가 만들어주어야한다.

이 Adapter부분은 내가 MVVM패턴을 쓰는지 아닌지, DataBinding이나 ViewBinding을 쓰는지 아닌지, Binding Adapter를 쓰는지 아닌지 item을 매개변수로 주는지 아니면 다른 함수로 만들어서 주는지 아닌지 등등 여러 갈래로 나뉘기 때문에 사람마다 많이 다른것 같다.

그럼 Adapter를 만드는 가장 기본적인 과정이 어떻게 될까?

1. 클래스 선언부

으로 시작한다. 아마 CustomViewHolder부분을 적으면 Top10Adapter안에 CustomViewHolder라는 클래스가 없다고 뜰것이다.

2. ViewHolder 작성하기

중첩 클래스 형식으로 클래스 안에 클래스를 만든다. 이런 방식을 중첩 클래스 방식이라고 하는데 중첩 클래스가 무엇인지는 다루지 않겠다.!
ViewHolder를 작성하는 것이라서 이름은 아무렇게 적어도 괜찮다. 대신 그냥 ViewHolder라고 이름지으면 실제 ViewHolder라는 예약어랑 헷갈려하니 살짝 바꿔주기는 하자.각각 클래스 이름은 달라도 된다는 것을 보여주는 부분이다.

그럼 저 매개변수로 들어가는 binding형식은 뭐냐? 라고 물어본다면 저건 뷰바인딩 형식으로 만든 객체이다. 우리가 2번에서 만들었던 item_layout.xml 파일엔 id를 적어놨을 것이다. 그 id를 참고하기 위해서는 item_layout.xml이 메모리에 올라가야하고 이걸 뷰바인딩이 알아서 처리해주는 것이다. xml의 이름을 토대로 첫글자는 대문자, 밑줄(\_) 기준으로또 대문자 + Binding이 붙어져서 만들어진다. item_layout.xml이면 ItemLayoutBinding이 되는것이다.

어쨌든 ViewHolder를 클래스는 클래스이기 때문에 무언가를 상속받는데 RecyclerView.ViewHolder라는 것을 상속받게 된다. binding.root는 우리가 만든 layout의 최상위 루트를 주는걸로 그냥 xml파일을 넘겨준다고 생각하자.
그럼 binding.id이름으로 레이아웃에 만들었던 id값을 토대로 그 View에 뭘 그릴지 지정해줄수 있게 된다.

3. RecyclerView.Adapter 3개 override하기

ViewHolder를 만들었으면 class에서 뭘 implementation할게 있다고 빨간줄이 뜨게 될것이고
멤버함수를 추가해주자.

그럼 onCreateViewHolder, getItemCount, onBindViewHolder가 만들어질것이다!
각각의 관계에 대해서는 설명하지 않을것입니다!

onCreateViewHolder
onCreateViewHolder에서 viewBinding을 사용할것이기 때문에 위와 같은 형식으로 만들어 주어야한다. ListInformationBinding은 list_information.xml파일을 뜻하는것으로 각자의 recyclerView의 레이아웃에 맞게 적어주자. 방금 2번에서 했던것처럼 말이다.
return 값으로는 방금 만든 CustomViewHolder를 넘겨주기만 하면된다.

getItemCount실제 보여지는 recyclerView의 아이템 개수이다. 여기에 적은 리턴 값에 따라서 메인 화면상에 보여지는 개수가 달라진다. 1번에서 적었던 선언부의 매개변수에서 .size를 하면 데이터의 사이즈를 구해서 데이터의 개수만큼 딱맞게 적을 수있다.
아님 Int.MaxValue인가? 를 주어서 무한히 많은 수도 만들어줄 수 있다.

onBindViewHolder
이전에 CustomViewHolder에서 xml파일의 View의 id를 변수로 만들어 놧을것이다. 처럼 말이다. 그럼 이 변수를 토대로 onBindViewHolder에서는 position에 맞게 값을 넣어줄수 있다.onBindViewHolder의 기본 매개변수를 보면 position이 있다. 이 position은 recyclerView에서 자동으로 만들어지는 View의 위치로 몇번째 layout을 그리고 있는지 나타낸다.
CustomViewHolder에서 선언한 변수 이름에 holder.변수명 으로 데이터가 수정될 수 있다. view가 textView라서 text를 추가해야한다면 holder.이름.text = "블라블라"로 넣어준다는 식이다. 그런데 이 "블라블라"에 들어갈 부분은 3번에서 만든 데이터에서 인덱싱으로 position값을 넣어주면 자동으로 반복되어서 만들어질것이다!
화면상에 recyclerView의 item이 만들어지는 개수만큼 onBindViewHolder가 실행되기 때문이다.

CustomViewHolder나 onBindViewHolder에 데이터를 넣고 붙이고 수정하는 방식은 내가 어떤 패턴을 쓰는지 어떻게 나눌건지에 따라서 많~~~이 달라진다.

그럼 이렇게 Adapter 클래스가 다 만들어진 것이다.

5. MainActivity에서 1번의 RecyclerView와 4번에서 만든 Adapter연결해주기

1번에서 recyclerView의 id를 통해서 가져와보자. 그럼 layoutManager와 adapter라는걸 설정해줄수있다는것을 알 수 있다. 그럼 위와 같이 layoutManager와 adapter를 만들어준다.

layoutManager는 어떤 방식으로 RecyclerView를 그릴건지의 이야기로 LinearLayoutManager, GridLayoutManager 등이 있는 걸로 기억한다. 여기선 VERTICAL로 수직 방향으로 그린다고 적혀있는것이다!

adapter는 우리가 4번에서 만든 클래스를 사용하는 것이다. 매개변수로는 3번에서 만든 데이터를 넘겨주는것이고.

리사이클러뷰에는 여러 속성이 있지만 꼭 필요한건 저 두개이다.


RecyclerView는 기본적으로 위와 같은 순서를 따라서 만들 것이다.

profile
배운거 정리하기

1개의 댓글

comment-user-thumbnail
2023년 5월 19일

너무나 감사합니다... 적게 일하시고 많이 버세요...

답글 달기