Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

이제는 ConcatAdapter가 필요할 때 #16

Open
taeheeL opened this issue Mar 19, 2023 · 0 comments
Open

이제는 ConcatAdapter가 필요할 때 #16

taeheeL opened this issue Mar 19, 2023 · 0 comments
Assignees
Labels

Comments

@taeheeL
Copy link

taeheeL commented Mar 19, 2023

ConcatAdapter의 필요성

앞으로는 한 화면에 다양한 layout의 RecyclerView를 표현해야 할 경우가 많을 것입니다. RecyclerView를 여러 개 만들고 각각에 Adpater를 할당해도 되지만, 하나의 RecyclerView를 사용하는 것이 좋은 방법입니다. 이 경우에 Adapter 내에 ViewType을 나누어 각자의 ViewHolder에 할당하는 방법을 사용하셨을 겁니다.

위의 방법은 ViewType이 많아질수록, 내부 코드가 복잡해지고, 이에 대한 처리를 하나의 클래스 안에서 해결해야 하는 문제가 있습니다. 이를 개선하고자 추가된 어뎁터가 바로 ConcatAdapter입니다.

사용법

1) Gradle에 Libary 추가하기

ConcatAdapter는 RecyclerView 1.2.0 버전부터 추가되었으니 이에 상응하는 Library를 추가해야 합니다.

implementation "androidx.recyclerview:recyclerview:1.2.1"

2) Adapter 생성

이 부분은 다를 게 딱히 없습니다. 평소에 구현하는 방식으로 여러 개의 어뎁터를 생성해주시면 됩니다.

3) 사용하기

val topSellingSectionAdapter = CategoryTopSellingSectionAdapter()
val titleAdapter = CategorySectionTitleAdaptor()
val promotionAdapter = CategoryPromotionAdaptor()
binding.rvCategoryDetail.adapter = ConcatAdapter(topSellingSectionAdapter, titleAdapter, promotionAdapter)

위와 같이 사용할 어뎁터의 객체들을 생성한 뒤 ConcatAdapter로 묶어주고 RecyclerView에 할당하면 끝입니다. 이제는 다음과 같이 필요한 동작들을 여러 개 어뎁터를 사용하여 정의할 수 있습니다.

viewModel.topSelling.observe(viewLifecycleOwner) { topSelling ->
            topSellingSectionAdapter.submitList(listOf(topSelling))
        }

viewModel.promotions.observe(viewLifecycleOwner) { promotions ->
            titleAdapter.submitList(listOf(promotions.title))
            promotionAdapter.submitList(promotions.items)
         }
@taeheeL taeheeL self-assigned this Mar 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant