일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Today
- Total
- navArg
- android navigation
- android argument
- custom spinner
- CoordinateLayout
- 안드로이드 범블비
- 안드로이드 커스텀 스위치
- 안드로이드 스튜디오
- navController
- 안드로이드
- layout behavior
- navigation navigate
- 무선페어링
- 파이어베이스
- 스피너 힌트
- 안드로이드 커스텀 스피너
- android custom spinner
- android custom switch
- thumb 공간
- checkedChangeListener
- alarm manager
- 코딩
- navGraph
- Android
- Android Studio
- 툴바 고정
- android alarm manager
- android alarm
- track 공간
- spinner hint
Pa K'ode
[안드로이드] ConcatAdapter 사용법과 구현방법 본문
안녕하세요 주니어 개발자 파쿠입니다 ;)
오늘은 RecyclerView 에 포함된 어뎁터인 ConcatAdapter 에 대해서 알아보려고 합니다.
이전에 접해보신 분들은 MergeAdapter 라는 이름으로 알고 계실 텐데요 이름만 좀 더 직관적으로 변경되었습니다.
이름에서부터 예상되듯이 여러개의 어뎁터를 이어서 하나의 뷰를 그려주는 아주 유용한 친구입니다.
기존에 방식중 하나인 RecyclerView 에 각기 다른 Item 들을 적용시키려면 Adpater 내에 ViewType 을 나누어
각자의 ViewHolderPool 내에 할당 시켜주는 방식이었습니다.
해당 방식에 단점으로써, 분리할 ViewType 이 많아질수록 내부적으로 코드가 복잡해지고, 그 에 대한 처리를
하나의 클래스에서 처리해야 했다는 점입니다.
이를 개선하고자 추가된 어뎁터가 ConcatAdapter 입니다.
ConcatAdapter
장점으로는 기존의 단점을 보안하며, 객채 지향 원칙에 맞게 한 클래스가 한 가지의 역할을 담당할 수 있게 됩니다.
ConcatAdapter 는 RecyclerView 1.2.0 버전부터 추가되었으며 사용하시려면
RecyclerView 1.2.0 이상의 버전으로 추가하시거나 기존 버전을 올리셔야 합니다.
최신 버전 또는 안정화된 버전에 대해선 Google Developer 사이트에 상세히 명시되어있습니다.
1) Gradle에 Library 추가하기
app 수준의 build.gradle로 들어가셔서 Dependency내에 아래 Library를 추가해 줍니다.
implementation "androidx.recyclerview:recyclerview:1.2.1"
주의사항: Recyclerview 1.2.0 버전부터 기존의 getAdapterPosition() 함수가 deprecated 되면서
기존 함수를 대체할 getBindingAdapterPosition(), getAbsoluteAdapterPosition() 함수가 추가되었습니다.
새롭게 추가된 두가지 함수는 비슷한 역활을 하지만 ConcatAdapter 에선 아주 중요한 차이점이 존제합니다.
이건 어뎁터를 만든 후 다뤄보도록 하겠습니다.
동기화까지 하셨다면, 다음 단계로 넘어가 줍니다.
2) Adapter 만들기
ConcatAdapter 는 다수의 Adapter들을 담는 틀 역활을 합니다 . ConcatAdapter 안에 들어갈 다른 Adapter들을 만들어주겠습니다.
예시로 간단히 구현한 Adapter입니다 이런식으로 두가지의 어뎁터를 만들어 줍니다. (데이터는 넣지 않았습니다.)
Adapter.class
public class ADP_Chat extends RecyclerView.Adapter<ItemViewHolder> {
protected final ArrayList<String> mCurrentList = new ArrayList<>();
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_chat_list, parent, false);
return new ItemViewHolder(view);
}
public static final class ItemViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.txt_date);
}
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
String text = mCurrentList.get(position);
holder.textView.setText(text);
}
@Override
public int getItemCount() {
return mCurrentList.size();
}
}
여기서 새롭게 추가된 함수를 사용할수 있는데요,
getBingAdapterPosition() 함수는 이전 함수와 비슷하게 해당 Adapter내에 ViewHolder의 위치를 반환하고,
getAbsoluteAdapterPosition() 함수는 RecyclerView 에서 바라보는 절대적인 ViewHolder의 위치를 반환합니다.
따라서 두 어뎁터를 합친 ConcatAdapter 인 경우, 상황에 맞춰 어떤 함수를 사용할지 주의해야합니다.
상세한 설명이 궁금하신 분들을 위해 아레애 링크 남겨두도록 하겠습니다 :)
작성하셨다면 다음 단게로 넘어가 줍니다.
3) ConcatAdapter 사용하기
ConcatAdapter 는 사용법이 어렵지 않습니다, 마찬가지로 제가 작성한 예제로 설명을 대신하겠습니다.
Activity.class
//선언부
private final RecyclerView rv_chat;
private final ADP_Chat_Bookmark mAdpChatBookmark = new ADP_Chat_Bookmark();
private final ADP_Chat mAdpChat = new ADP_Chat();
private final ConcatAdapter mConcatAdapter = new ConcatAdapter();
//.addAdapter 된 순서대로 표시됌
mConcatAdapter.addAdapter(mAdpChatBookmark);
mConcatAdapter.addAdapter(mAdpChat);
rv_chat.setAdapter(mConcatAdapter);
마무리로 ConcatAdapter 에 Adapter들을 추가해주면 ViewHolder를 분리한것같은 결과를 얻을수 있습니다.
주의할 점으론 ConcatAdapter 에 추가된 순서대로 뷰가 그려지니 이점 유의하시면서 작성하시면 됩니다.
여기까지 ConcatAdapter 에 대해 알아보았는데요 이번 포스팅도 도움이 되셨길 바라며,
저는 다음 포스팅으로 찾아뵙겠습니다 감사합니다 :)
'안드로이드' 카테고리의 다른 글
[안드로이드] [디자인] Switch 커스텀 해서 사용하기 (0) | 2022.01.20 |
---|---|
[안드로이드] 유용한 CalendarView 라이브러리들을 알아보자 (2) | 2022.01.04 |
[안드로이드] TabLayout, ViewPager2 사용법과 다양한 활용방법 (0) | 2021.12.30 |
[안드로이드] 앱 내에서 알림 수신받기 (feat. FCM) (0) | 2021.12.27 |
[안드로이드] Gradle 로 Firebase 앱 자동배포하기 (0) | 2021.09.27 |