고급 RecyclerView 맞춤설정   Android Jetpack의 구성요소

RecyclerView 객체를 맞춤설정하여 특정 필요 사항을 충족할 수 있습니다. RecyclerView로 동적 목록 만들기에 설명된 표준 클래스는 대부분의 개발자에게 필요한 모든 기능을 제공합니다. 대부분의 경우 개발자는 각 뷰 홀더의 뷰를 설계하고 적절한 데이터로 뷰를 업데이트하기 위한 코드를 작성하는 맞춤설정만 실행하면 됩니다. 하지만 앱에 구체적인 요구 사항이 있다면 여러 가지 방법으로 표준 동작을 수정할 수 있습니다. 이 페이지에서는 가능한 다른 맞춤설정 중 그 일부를 설명합니다.

레이아웃 수정

RecyclerView는 레이아웃 관리자를 사용하여 화면에서 개별 항목의 위치를 정하고 사용자에게 더 이상 보이지 않는 항목 뷰를 재사용할 시점을 결정합니다. 뷰를 재사용(또는 재활용)하려면 레이아웃 관리자는 어댑터에 데이터 세트의 다른 요소를 사용하여 뷰의 콘텐츠를 교체하도록 요청할 수 있습니다. 이러한 방식으로 뷰를 재활용하면 불필요한 뷰의 생성을 피하거나 리소스를 많이 소모하는 findViewById() 조회를 방지하여 성능이 향상됩니다. Android 지원 라이브러리에는 다음의 세 가지 표준 레이아웃 관리자가 포함되며 각 관리자는 다양한 맞춤설정 옵션을 제공합니다.

조건에 맞는 레이아웃 관리자가 없다면 RecyclerView.LayoutManager 추상 클래스를 확장하여 고유의 레이아웃 관리자를 만들 수 있습니다.

항목 애니메이션 추가

항목이 변경될 때마다 RecyclerView애니메이터를 사용하여 모양을 변경합니다. 이 애니메이터는 RecyclerView.ItemAnimator 추상 클래스를 확장한 객체입니다. 기본적으로 RecyclerViewDefaultItemAnimator를 사용하여 애니메이션을 제공합니다. 맞춤 애니메이션을 제공하려면 RecyclerView.ItemAnimator를 확장하여 고유의 애니메이터 객체를 정의하면 됩니다.

목록 항목 선택 사용 설정

recyclerview-selection 라이브러리는 사용자가 터치 또는 마우스 입력을 사용하여 RecyclerView 목록에서 항목을 선택할 수 있도록 합니다. 선택된 항목의 시각적 표현을 제어할 수 있습니다. 또한 선택 동작을 제어하는 정책(예: 선택할 수 있는 항목 및 선택할 수 있는 항목의 개수)을 제어할 수도 있습니다.

RecyclerView 인스턴스에 선택 지원을 추가하려면 다음 단계를 따르세요.

  1. 사용할 선택 키 유형을 결정한 다음 ItemKeyProvider 빌드

    선택된 항목을 식별하는 데 사용할 수 있는 키 유형은 Parcelable(Uri 같은 모든 서브클래스 포함), StringLong 세 가지가 있습니다. 선택 키 유형에 관한 자세한 내용은 SelectionTracker.Builder를 참고하세요.

  2. ItemDetailsLookup 구현
  3. ItemDetailsLookupMotionEvent를 통해 선택 라이브러리가 RecyclerView 항목에 관한 정보에 액세스할 수 있도록 합니다. 이는 사실상 RecyclerView.ViewHolder 인스턴스에 의해 백업된(또는 인스턴스에서 추출된) ItemDetails 인스턴스의 팩토리입니다.

  4. RecyclerView에서 항목 Views를 업데이트하여 사용자가 항목을 선택하거나 선택 해제한 것을 반영

    선택 라이브러리는 선택된 항목에 기본적인 시각 장식을 제공하지 않습니다. onBindViewHolder()를 구현할 때 이를 제공해야 합니다. 추천하는 방법은 다음과 같습니다.

  5. ActionMode를 사용하여 사용자에게 선택에 관한 작업을 실행할 수 있는 도구를 제공합니다.
  6. SelectionTracker.SelectionObserver를 등록하여 선택이 변경될 때 알림을 받습니다. 처음 선택을 만들 때 ActionMode를 시작하여 사용자에게 선택을 표시하고 선택에 특화된 작업을 제공합니다. 예를 들어, 삭제 버튼을 ActionMode 막대에 추가하고 막대에 있는 뒤로 화살표에 연결하여 선택을 지울 수 있습니다. 선택한 항목이 없어지면(사용자가 마지막 선택을 지운 경우) 작업 모드를 종료해야 합니다.

  7. 해석된 모든 보조 작업을 실행
  8. 이벤트 처리 파이프라인의 끝에서 라이브러리는 사용자가 항목을 탭하여 활성화하는 것을 시도하거나 항목 또는 선택된 항목 집합을 드래그 앤 드롭하는 것을 시도하도록 결정할 수 있습니다. 적절한 리스너를 등록하여 이러한 해석에 반응합니다. 자세한 내용은 SelectionTracker.Builder를 참고하세요.

  9. SelectionTracker.Builder를 사용하여 모두 조립
  10. 다음 예는 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.AdapterSelectionTracker.Builder에 제공해야 합니다. 이런 이유로, RecyclerView.Adapter가 생성된 후 SelectionTracker 인스턴스가 생성되면 RecyclerView.Adapter에 삽입해야 합니다. 그러지 않으면 onBindViewHolder() 메서드에서 항목의 선택 상태를 확인할 수 없습니다.

  11. 활동 수명 주기 이벤트에 선택 포함
  12. 활동 수명 주기 이벤트에 걸쳐 선택 상태를 보존하려면 앱은 활동의 onSaveInstanceState()onRestoreInstanceState() 메서드 각각에서 선택 추적기의 onSaveInstanceState()onRestoreInstanceState() 메서드를 호출해야 합니다. 또한 앱에서 고유한 선택 ID를 SelectionTracker.Builder 생성자에 제공해야 합니다. 활동 또는 프래그먼트에는 모두 저장된 상태로 유지되어야 하는 두 개 이상의 구별된 선택 가능 목록이 있을 수 있기 때문에 이 ID는 필수입니다.

    추가 리소스

    RecyclerViewSunflower 데모 앱에서 사용됩니다.