동적 목록 맞춤설정 Android Jetpack의 구성요소
특정 요구사항에 맞게 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 인스턴스에 선택 지원을 추가하려면 다음 단계를 따르세요.
- 사용할 선택 키 유형을 결정한 다음
ItemKeyProvider를 빌드합니다.선택한 항목을 식별하는 데 사용할 수 있는 키 유형은 세 가지입니다.
Parcelable및 서브클래스(예:Uri)StringLong
선택 키 유형에 관한 자세한 내용은
SelectionTracker.Builder를 참고하세요. ItemDetailsLookup를 구현합니다.- 사용자가 항목을 선택하거나 선택 해제하는지 반영하도록
RecyclerView의 항목View객체를 업데이트합니다.thought 선택 라이브러리는 선택한 항목에 기본 시각적 장식을 제공하지 않습니다.
onBindViewHolder()를 구현할 때 제공합니다. 다음과 같은 접근 방식을 권장합니다.onBindViewHolder()에서 항목이 선택되었는지에 따라true또는false를 사용하여View객체에서setActivated()(setSelected()가 아님)을 호출합니다.- 뷰의 스타일을 업데이트하여 활성화된 상태를 나타냅니다. 색상 상태 목록 리소스를 사용하여 스타일을 구성하는 것이 좋습니다.
ActionMode를 사용하여 사용자에게 선택 항목에 대한 작업을 실행할 수 있는 도구를 제공합니다.- 해석된 보조 작업을 수행합니다.
SelectionTracker.Builder으로 모든 것을 조합하세요.- 활동 수명 주기 이벤트에 선택을 포함합니다.
ItemDetailsLookup를 사용하면 선택 라이브러리가 MotionEvent가 지정된 RecyclerView 항목에 관한 정보에 액세스할 수 있습니다.
이는 RecyclerView.ViewHolder 인스턴스에서 백업되거나 추출된 ItemDetails 인스턴스의 팩토리입니다.
선택사항이 변경될 때 알림을 받도록 SelectionTracker.SelectionObserver를 등록합니다. 선택 항목이 처음 생성되면 ActionMode를 시작하여 사용자에게 이를 표시하고 선택 항목별 작업을 제공합니다. 예를 들어 ActionMode 표시줄에 삭제 버튼을 추가하고 표시줄의 뒤로 화살표를 연결하여 선택을 지울 수 있습니다. 선택 항목이 비어 있으면(사용자가 마지막으로 선택 항목을 지운 경우) 작업 모드를 종료합니다.
이벤트 처리 파이프라인의 끝에서 라이브러리는 사용자가 항목을 탭하여 활성화하려고 하거나 항목 또는 선택한 항목 집합을 드래그하려고 한다고 판단할 수 있습니다. 적절한 리스너를 등록하여 이러한 해석에 반응합니다. 자세한 내용은 SelectionTracker.Builder을 참조하세요.
다음 예시에서는 이러한 요소를 결합하는 방법을 보여줍니다.
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() 메서드에서 항목의 선택 상태를 확인할 수 없습니다.
활동 수명 주기 이벤트에서 선택 상태를 유지하려면 앱이 활동의 onSaveInstanceState() 및 onRestoreInstanceState() 메서드에서 각각 선택 추적기의 onSaveInstanceState() 및 onRestoreInstanceState() 메서드를 호출해야 합니다. 앱은 SelectionTracker.Builder 생성자에 고유한 선택 ID도 제공해야 합니다. 활동 또는 프래그먼트에 고유하고 선택 가능한 목록이 두 개 이상 있을 수 있고 이 목록을 모두 저장된 상태로 유지해야 하므로 이 ID가 필요합니다.
추가 리소스
자세한 내용은 다음 참고 자료를 확인하세요.
RecyclerView를 사용하는 Sunflower 데모 앱- RecyclerView를 사용하여 스크롤 가능한 목록 표시 Codelab
- Android Kotlin 기초: RecyclerView 기초 Codelab