고급 RecyclerView 맞춤설정 Android Jetpack의 구성요소
RecyclerView
객체를 맞춤설정하여 특정 필요 사항을 충족할 수 있습니다. RecyclerView로 동적 목록 만들기에 설명된 표준 클래스는 대부분의 개발자에게 필요한 모든 기능을 제공합니다. 대부분의 경우 개발자는 각 뷰 홀더의 뷰를 설계하고 적절한 데이터로 뷰를 업데이트하기 위한 코드를 작성하는 맞춤설정만 실행하면 됩니다. 하지만 앱에 구체적인 요구 사항이 있다면 여러 가지 방법으로 표준 동작을 수정할 수 있습니다. 이 페이지에서는 가능한 다른 맞춤설정 중 그 일부를 설명합니다.
레이아웃 수정
RecyclerView
는 레이아웃 관리자를 사용하여 화면에서 개별 항목의 위치를 정하고 사용자에게 더 이상 보이지 않는 항목 뷰를 재사용할 시점을 결정합니다. 뷰를 재사용(또는 재활용)하려면 레이아웃 관리자는 어댑터에 데이터 세트의 다른 요소를 사용하여 뷰의 콘텐츠를 교체하도록 요청할 수 있습니다. 이러한 방식으로 뷰를 재활용하면 불필요한 뷰의 생성을 피하거나 리소스를 많이 소모하는 findViewById()
조회를 방지하여 성능이 향상됩니다. Android 지원 라이브러리에는 다음의 세 가지 표준 레이아웃 관리자가 포함되며 각 관리자는 다양한 맞춤설정 옵션을 제공합니다.
LinearLayoutManager
는 항목을 1차원 목록으로 정렬합니다.LinearLayoutManager
와 함께RecyclerView
를 사용하면 이전의ListView
레이아웃과 같은 기능을 제공합니다.GridLayoutManager
는 격자무늬의 정사각형과 같이 항목을 2차원 그리드로 정렬합니다.GridLayoutManager
와 함께RecyclerView
를 사용하면 이전의GridView
레이아웃과 같은 기능을 제공합니다.StaggeredGridLayoutManager
는 항목을 미국 국기의 별과 같이 각 열이 앞의 열과 약간 떨어진 2차원 그리드로 정렬합니다.
조건에 맞는 레이아웃 관리자가 없다면 RecyclerView.LayoutManager
추상 클래스를 확장하여 고유의 레이아웃 관리자를 만들 수 있습니다.
항목 애니메이션 추가
항목이 변경될 때마다 RecyclerView
는 애니메이터를 사용하여 모양을 변경합니다. 이 애니메이터는 RecyclerView.ItemAnimator
추상 클래스를 확장한 객체입니다. 기본적으로 RecyclerView
는 DefaultItemAnimator
를 사용하여 애니메이션을 제공합니다. 맞춤 애니메이션을 제공하려면 RecyclerView.ItemAnimator
를 확장하여 고유의 애니메이터 객체를 정의하면 됩니다.
목록 항목 선택 사용 설정
recyclerview-selection
라이브러리는 사용자가 터치 또는 마우스 입력을 사용하여 RecyclerView
목록에서 항목을 선택할 수 있도록 합니다.
선택된 항목의 시각적 표현을 제어할 수 있습니다. 또한 선택 동작을 제어하는 정책(예: 선택할 수 있는 항목 및 선택할 수 있는 항목의 개수)을 제어할 수도 있습니다.
RecyclerView
인스턴스에 선택 지원을 추가하려면 다음 단계를 따르세요.
- 사용할 선택 키 유형을 결정한 다음
ItemKeyProvider
빌드선택된 항목을 식별하는 데 사용할 수 있는 키 유형은
Parcelable
(Uri
같은 모든 서브클래스 포함),String
및Long
세 가지가 있습니다. 선택 키 유형에 관한 자세한 내용은SelectionTracker.Builder
를 참고하세요. ItemDetailsLookup
구현RecyclerView
에서 항목Views
를 업데이트하여 사용자가 항목을 선택하거나 선택 해제한 것을 반영선택 라이브러리는 선택된 항목에 기본적인 시각 장식을 제공하지 않습니다.
onBindViewHolder()
를 구현할 때 이를 제공해야 합니다. 추천하는 방법은 다음과 같습니다.onBindViewHolder()
에서View
객체에true
또는false
(항목 선택 여부)로setActivated()
(setSelected()
아님)를 호출합니다.- 뷰의 스타일을 업데이트하여 활성화된 상태를 나타냅니다. 색상 상태 목록 리소스를 사용하여 스타일을 구성하는 것이 좋습니다.
ActionMode
를 사용하여 사용자에게 선택에 관한 작업을 실행할 수 있는 도구를 제공합니다.- 해석된 모든 보조 작업을 실행
SelectionTracker.Builder
를 사용하여 모두 조립- 활동 수명 주기 이벤트에 선택 포함
ItemDetailsLookup
은 MotionEvent
를 통해 선택 라이브러리가 RecyclerView
항목에 관한 정보에 액세스할 수 있도록 합니다.
이는 사실상 RecyclerView.ViewHolder
인스턴스에 의해 백업된(또는 인스턴스에서 추출된) ItemDetails
인스턴스의 팩토리입니다.
SelectionTracker.SelectionObserver
를 등록하여 선택이 변경될 때 알림을 받습니다. 처음 선택을 만들 때 ActionMode
를 시작하여 사용자에게 선택을 표시하고 선택에 특화된 작업을 제공합니다. 예를 들어, 삭제 버튼을 ActionMode
막대에 추가하고 막대에 있는 뒤로 화살표에 연결하여 선택을 지울 수 있습니다. 선택한 항목이 없어지면(사용자가 마지막 선택을 지운 경우) 작업 모드를 종료해야 합니다.
이벤트 처리 파이프라인의 끝에서 라이브러리는 사용자가 항목을 탭하여 활성화하는 것을 시도하거나 항목 또는 선택된 항목 집합을 드래그 앤 드롭하는 것을 시도하도록 결정할 수 있습니다. 적절한 리스너를 등록하여 이러한 해석에 반응합니다. 자세한 내용은 SelectionTracker.Builder
를 참고하세요.
다음 예는 Long
선택 키를 사용하여 이러한 조각들을 합하는 방법을 보여줍니다.
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
자바
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
SelectionTracker
인스턴스를 빌드하려면 앱은 RecyclerView
를 초기화하는 데 사용했던 동일한 RecyclerView.Adapter
를 SelectionTracker.Builder
에 제공해야 합니다.
이런 이유로, RecyclerView.Adapter
가 생성된 후 SelectionTracker
인스턴스가 생성되면 RecyclerView.Adapter
에 삽입해야 합니다. 그러지 않으면 onBindViewHolder()
메서드에서 항목의 선택 상태를 확인할 수 없습니다.
활동 수명 주기 이벤트에 걸쳐 선택 상태를 보존하려면 앱은 활동의 onSaveInstanceState()
와 onRestoreInstanceState()
메서드 각각에서 선택 추적기의 onSaveInstanceState()
와 onRestoreInstanceState()
메서드를 호출해야 합니다. 또한 앱에서 고유한 선택 ID를 SelectionTracker.Builder
생성자에 제공해야 합니다. 활동 또는 프래그먼트에는 모두 저장된 상태로 유지되어야 하는 두 개 이상의 구별된 선택 가능 목록이 있을 수 있기 때문에 이 ID는 필수입니다.
추가 리소스
RecyclerView
는 Sunflower 데모 앱에서 사용됩니다.