일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 고차함수
- searchview
- 재사용
- fragment
- 뷰변경 감지
- 구분선
- Android
- recyclerview
- 안드로이드개발레벨업교과서
- ui test
- Fragment에서 Activity의 함수 사용하기
- espresso
- high order function
- 코딜리티
- IntentTestRule
- viewholder
- 안드로이드13
- 생명주기
- 코틀린
- 스와이프
- adapter
- Error:Execution failed for task ':app:mergeDebugResources'
- Fragment 수동 추가
- LayoutManger
- 리사이클러뷰
- 안드로이드
- 안드로이드스튜디오
- 테마 아이콘
- ActivityTestRule
- binding adapter
Archives
- Today
- Total
룬아님의 취중코딩
IllegalStateException : Detected inconsistent adapter updates. 본문
ConcatAdapter를 사용하던 도중 다음과 같은 crash를 만났다.
원인은 간단했다.
ConcatAdapterController
public int getLocalAdapterPosition(
Adapter<? extends ViewHolder> adapter,
ViewHolder viewHolder,
int globalPosition
) {
NestedAdapterWrapper wrapper = mBinderLookup.get(viewHolder);
if (wrapper == null) {
return NO_POSITION;
}
int itemsBefore = countItemsBefore(wrapper);
// local position is globalPosition - itemsBefore
int localPosition = globalPosition - itemsBefore;
// Early error detection:
int itemCount = wrapper.adapter.getItemCount();
if (localPosition < 0 || localPosition >= itemCount) {
throw new IllegalStateException("Detected inconsistent adapter updates. The"
+ " local position of the view holder maps to " + localPosition + " which"
+ " is out of bounds for the adapter with size "
+ itemCount + "."
+ "Make sure to immediately call notify methods in your adapter when you "
+ "change the backing data"
+ "viewHolder:" + viewHolder
+ "adapter:" + adapter);
}
return wrapper.adapter.findRelativeAdapterPositionIn(adapter, viewHolder, localPosition);
}
ConcatAdapterController에서 wrapper.adapter.getItemCount()로 localPosition과 비교하는 로직이 있는데
ListAdapter를 구현할 때 getItemCount를 별도 로직으로 override하여서 실제 아이템의 size와 일치하지 않았기 때문에 발생한 이슈였다.
실제 아이템의 사이즈를 이용하도록 하여 수정하였다.
override fun getItemCount(): Int {
return currentList.size
}
반응형
'개발 > 안드로이드 개발' 카테고리의 다른 글
Android12 Splash Screen 로고 지우기 (0) | 2023.04.28 |
---|---|
여러 유형의 Response type을 Gson를 이용하여 Sealed Class로 받기 (0) | 2023.04.14 |
Android 13 Notification permission 분기 (0) | 2023.03.29 |
(Compose) Text의 자간이 넓어 보일 때 (0) | 2023.03.24 |
(Android) 패키지명으로 SHA-1 키값 가져오는 방법 (0) | 2023.03.22 |
Comments