동적 목록 맞춤설정   Android Jetpack의 구성요소

Compose 방식 사용해 보기
Jetpack Compose는 Android용으로 권장되는 UI 도구 키트입니다. Compose에서 레이아웃을 사용하는 방법을 알아보세요.

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

레이아웃 수정

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

  • LinearLayoutManager: 항목을 1차원 목록으로 정렬합니다. RecyclerView를 LinearLayoutManager와 함께 사용하면 ListView 레이아웃과 같은 기능을 제공합니다.
  • GridLayoutManager: 체커보드의 정사각형과 같이 2차원 그리드에 항목을 정렬합니다. GridLayoutManager와 함께 RecyclerView를 사용하면 GridView 레이아웃과 같은 기능이 제공됩니다.
  • StaggeredGridLayoutManager: 미국 국기의 별처럼 각 열이 이전 열에서 약간 오프셋된 2차원 그리드에 항목을 정렬합니다.

이러한 레이아웃 관리자가 요구사항에 맞지 않으면 RecyclerView.LayoutManager 추상 클래스를 확장하여 자체 레이아웃 관리자를 만들 수 있습니다.

항목 애니메이션 추가

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

목록 항목 선택 사용 설정

recyclerview-selection 라이브러리를 사용하면 사용자가 터치 또는 마우스 입력을 사용하여 RecyclerView 목록에서 항목을 선택할 수 있습니다. 이렇게 하면 선택한 항목의 시각적 표현을 계속 제어할 수 있습니다. 선택할 수 있는 항목, 선택할 수 있는 항목 수와 같은 선택 동작을 제어하는 정책을 계속 제어할 수도 있습니다.

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

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

    선택한 항목을 식별하는 데 사용할 수 있는 키 유형은 세 가지입니다.

    선택 키 유형에 관한 자세한 내용은 SelectionTracker.Builder를 참고하세요.

  2. ItemDetailsLookup를 구현합니다.
  3. ItemDetailsLookup를 사용하면 선택 라이브러리가 MotionEvent가 지정된 RecyclerView 항목에 관한 정보에 액세스할 수 있습니다. 이는 RecyclerView.ViewHolder 인스턴스에서 백업되거나 추출된 ItemDetails 인스턴스의 팩토리입니다.

  4. 사용자가 항목을 선택하거나 선택 해제하는지 반영하도록 RecyclerView의 항목 View 객체를 업데이트합니다.

    thought 선택 라이브러리는 선택한 항목에 기본 시각적 장식을 제공하지 않습니다. onBindViewHolder()를 구현할 때 제공합니다. 다음과 같은 접근 방식을 권장합니다.

    • onBindViewHolder()에서 항목이 선택되었는지에 따라 true 또는 false를 사용하여 View 객체에서 setActivated()(setSelected()가 아님)을 호출합니다.
    • 뷰의 스타일을 업데이트하여 활성화된 상태를 나타냅니다. 색상 상태 목록 리소스를 사용하여 스타일을 구성하는 것이 좋습니다.
  5. ActionMode를 사용하여 사용자에게 선택 항목에 대한 작업을 실행할 수 있는 도구를 제공합니다.
  6. 선택사항이 변경될 때 알림을 받도록 SelectionTracker.SelectionObserver를 등록합니다. 선택 항목이 처음 생성되면 ActionMode를 시작하여 사용자에게 이를 표시하고 선택 항목별 작업을 제공합니다. 예를 들어 ActionMode 표시줄에 삭제 버튼을 추가하고 표시줄의 뒤로 화살표를 연결하여 선택을 지울 수 있습니다. 선택 항목이 비어 있으면(사용자가 마지막으로 선택 항목을 지운 경우) 작업 모드를 종료합니다.

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

  9. SelectionTracker.Builder으로 모든 것을 조합하세요.
  10. 다음 예시에서는 이러한 요소를 결합하는 방법을 보여줍니다.

    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에 제공해야 합니다. 따라서 SelectionTracker 인스턴스를 만든 후 RecyclerView.Adapter에 삽입합니다. 그렇지 않으면 onBindViewHolder() 메서드에서 항목의 선택 상태를 확인할 수 없습니다.

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

추가 리소스

자세한 내용은 다음 참고 자료를 확인하세요.