동적 목록 사용자 설정

kosdjs·2025년 9월 24일

Android

목록 보기
24/29
  • 특정 요구를 맞추기 위해 RecyclerView 객체를 사용자 설정할 수 있음, RecyclerView로 동적 목록 만들기에서 설명된 표준 클래스는 대부분의 개발자가 필요하는 모든 기능을 제공함, 대부분의 경우 각 뷰홀더를 위한 뷰와 적합한 데이터로 해당 뷰를 수정하는 코드만 설계하면 됨, 하지만, 앱이 특정 요구사항을 만족해야 한다면 다양한 방식으로 동작을 수정할 수 있음

레이아웃 수정

  • RecyclerView 는 개별 아이템의 위치를 정할 때와 사용자에게 보이지 않게 된 아이템을 언제 재사용할지 정할 때 레이아웃 매니저를 사용함, 뷰를 재사용하려면 레이아웃 매니저가 어댑터에게 데이터셋의 다른 요소로 뷰의 내용을 교체하라고 요청함, 이렇게 뷰를 재사용하는 것은 성능을 개선하고 불필요하게 뷰를 생성하거나 리소스를 많이 사용하는 findViewById() 를 사용한 조회를 방지함, 안드로이드 지원 라이브러리는 세가지의 표준 레이아웃 매니저를 포함함, 각각은 다양한 사용자 지정 옵션을 제공함

    • LinearLayoutManager : 아이템을 일차원 리스트로 정렬함, LinearLayoutManager 를 사용하는 RecyclerViewListView 레이아웃과 같은 기능을 제공함
    • GridLayoutManager : 아이템을 체스보드의 네모 칸같이 이차원 그리드로 정렬함, GridLayoutManager 를 사용한 RecyclerViewGridView 레이아웃과 같은 기능을 제공함
    • StaggeredGridLayoutManager : 아이템을 각 열이 미국 국기의 별처럼 앞의 열에서 살짝 떨어져 있는 이차원 그리드로 정렬함
  • 만약 이 레이아웃 매니저가 필요에 맞지 않는다면 RecyclerView.LayoutManager 추상 클래스를 확장해 새로 만들어야 함

아이템 애니메이션 추가

  • 아이템이 변경될 때 RecyclerViewanimator 를 사용해 모양을 변경함, animatorRecyclerView.ItemAnimator 추상 클래스를 확장한 객체임, 기본적으로 RecyclerViewDefaultItemAnimator 를 사용해 애니메이션을 제공함, 사용자 지정 애니메이션을 제공하려면 RecyclerView.ItemAnimator 를 확장해 직접 animator 객체를 정의해야 함

목록 아이템 선택 사용 설정

  • recyclerview-selection 라이브러리는 RecyclerView 목록의 항목을 사용자가 터치나 마우스 입력으로 선택할 수 있게 해줌, 이는 선택된 아이템의 시각적 표현을 제어할 수 있게 해줌, 또한 몇 개의 아이템이 선택 가능한지, 어느 아이템이 선택 가능한지와 같은 선택 동작을 제어할 수 있게 해줌

  • RecyclerView 인스턴스에 선택을 지원하려면 다음 단계를 따라야 함

  1. 사용할 선택 키 유형을 결정하고 ItemKeyProvider 를 빌드함
    선택된 아이템을 식별하는 데 사용할 수 있는 세 가지 키 유형은 다음과 같음

    • ParcelableUri 와 같은 서브 클래스
    • String
    • Long
      선택 키 유형에 대해 자세한 정보를 보려면 SelectionTracker.Builder 를 확인
  2. ItemDetailsLookup 을 구현함
    ItemDetailsLookup 은 선택 라이브러리가 주어진 MotionEvent 에서 RecyclerView 아이템의 정보에 대해 접근할 수 있게 함, 그것은 사실상 RecyclerView.ViewHolder 인스턴스를 기반으로 하거나 인스턴스에서 추출한 ItemDetails 인스턴스의 팩토리 역할을 함

  3. RecyclerView 의 아이템의 View 객체를 사용자가 선택하거나 선택 해제를 한 것을 반영하기 위해 수정함
    선택 라이브러리는 선택된 아이템을 위한 기본 시각 효과를 제공하지 않음, onBindViewHolder() 를 구현할 때 이를 제공해야 함, 다음과 같이 접근하는 것을 추천함

    • onBindViewHolder() 에서 아이템이 선택되었는지에 따라 View 객체에서 setActivated() 를 호출
    • 활성화 되었다는 것을 나타낼 수 있도록 뷰의 스타일을 수정함, 스타일을 수정할 때 색상 상태 목록 리소스를 사용하는 것을 추천함
  4. 사용자에게 선택에 대한 동작을 수행할 도구를 제공하도록 ActionMode 를 사용함
    선택이 변경될 때 알림을 받으려면 SelectionTracker.SelectionObserver 를 등록해야 함, 선택이 처음 생성되면 ActionMode 를 시작해 사용자에게 선택되었다는 것을 알리고 선택 관련 동작을 제공함, 예시로 ActionMode 바에 삭제 버튼을 추가하고 바의 뒤로가기를 선택 해제로 연결할 수 있음, 사용자가 마지막으로 선택 해제를 해 선택이 비었을 때 액션 모드를 종료함

  5. 해석된 모든 2차 행동 실행
    이벤트 처리 파이프라인의 끝에서 라이브러리는 사용자가 아이템을 탭해서 활성화하려고 하는지, 아니면 선택된 아이템들을 드래그하려고 하는지를 해석할 수 있음, 해석된 행동에 대해 적절한 리스너를 등록해 반응할 수 있음

  6. SelectionTracker.Builder 에서 모든 것을 조합
    다음 예제는 모든 것을 합치는 방법을 보여줌

    var tracker = SelectionTracker.Builder(
        "my-selection-id",
        recyclerView,
        StableIdKeyProvider(recyclerView),
        MyDetailsLookup(recyclerView),
        StorageStrategy.createLongStorage())
           .withOnItemActivatedListener(myItemActivatedListener)
           .build()

    SelectionTracker 인스턴스를 생성하려면 앱은 반드시 RecyclerView 를 초기화하는데 사용한 RecyclerView.AdapterSelectionTracker.Builder 에 제공해야 함, 이에 따라 SelectionTracker 인스턴스를 생성하면 RecyclerView.Adapter 에 삽입해야 함, 그렇지 않으면 onBindViewHolder() 메소드에서 아이템이 선택되었는지 여부를 확인할 수 없음

  7. 선택을 액티비티 생명주기 이벤트에 포함하기
    선택 상태를 액티비티 생명주기 이벤트 동안 보존하려면 앱은 만드시 선택 트래커의 onSaveInstanceState()onRestoreInstanceState() 메소드를 각각 액티비티의 onSaveInstanceState()onRestoreInstanceState() 메소드에서 호출해야 함, 앱은 반드시 고유한 선택 ID를 SelectionTracker.Builder 생성자에 제공해야함, 이 ID는 액티비티나 프래그먼트에서 하나 이상의 선택 가능한 리스트를 가질 수 있고, 각각 모두 상태가 저장되어야 하므로 필요함

원문: https://developer.android.com/develop/ui/views/layout/recyclerview-custom

0개의 댓글