RecyclerVeiw

노력을 즐겼던 사람·2020년 7월 12일
1

사오정 앱개발

목록 보기
2/11
post-thumbnail

RecyclerView란?

RecyclerView는 ListView에서 더 유연하고 심화된 버전이다. RecyclerView 모델에서는 서로 다른 컴포넌트들이 함께 디스플레이될 수 있다. UI를 위한 컨테이너는 개발자가 레이아웃에 추가한 RecyclerView 객체가 될 것이다. RecyclerView는 개발자가 정의한 레이아웃 매니저에 의해 채워진다. 레이아웃 매니저는 표준 레이아웃 매니저(LinearLayoutManager, GridLayoutManager)도 사용이 가능하고 직접 구현해서 사용해도 된다.

RecyclerView와 View Holder

리스트에 존재하는 view들은 view holder 객체들에 의해 제공된다. 이 객체들은 개발자가 정의한 RecyclerView.ViewHolder의 객체이다. 각각의 view holder들은 하나의 view 아이템 담당하여 디스플레이한다. 예를들어서 음악 리스트를 보여준다고 하면 각각의 view holder들은 하나의 앨범들을 제공할 것이다. RecyclerView는 필요한 만큼의 view holder들을 동적으로 생성하고 여분으로 몇개 더 생성한다. 사용자가 리스트의 스크롤을 내리면 RecyclerView는 off-screen view를 가져오고 그것들에 데이터를 다시 바인딩한다.

RecyclerView와 Adapter

View Holder는 RecyclerView.Adapter를 상속하여 정의한 adapter에 의해 관리된다. adapter는 필요한 만큼의 view hodler를 생성한다. 또한 adapter는 view holder에 데이터를 바인딩한다. 데이터 바인딩은 view holder의 위치를 지정하여 이루어진다. adpater의 onBindViewHolder() 메소드를 통해서 가능하다.

RecyclerView의 최적화 덕분에 안해도 되는 것들

  • 리스트가 가득 채워지면 여분의 view holder를 준비해놓는다. 그래서 스크롤이 내려갈 때 다음 요소가 이미 준비가 되어 있다.
  • 유저가 스크롤을 내릴 떄 RecyclerView는 필요한 만큼의 새로운 view holder를 생성한다. 이때 스크린 밖에 있는 view holder들을 저장하기도 한다 이 덕분에 view holder들은 재사용 될 수 있다.
  • 표시 되어 있는 아이템이 변경되면 RecyclerView.notify..() 메소드를 호출하여 adapter에게 알려줄 수 있다. 알림을 받은 adapter는 새로운 데이터를 바인딩 한다.

간단한 예제

github

참고문서

잘 정리된 블로그
공식문서

profile
노력하는 자는 즐기는 자를 이길 수 없다 를 알면서도 게으름에 지는 중

0개의 댓글