본문 바로가기

ANDROID/Debug Logs

[안드로이드] Inconsistency detected. Invalid view holder adapter positionViewHolder

 

최근 크래시 리포트에서 RecyclerView와 관련된 오류가 하나 집계되었다.

 

Inconsistency detected. Invalid view holder adapter positionViewHolder

 

찾아보니 삼성 디바이스에서 발생하는 이슈로 올라와있는 스택 오버플로우 질문이 있었고,

 

나와있는 해결책중에 개인적으로 덜 복잡하다고 생각되는 솔루션을 사용해보았다.

 

방법은

 

1. LinearLayoutManager를 상속받는 LinerLayoutManagerWrapper 클래스를 만든다.

 

...

class LinearLayoutManagerWrapper: LinearLayoutManager {
	constructor(context: Context) : super(context) {}
    
    constructor(context: Context, orientation: Int, reverseLayout: Boolean) : super(context, orientation, reverseLayout) {}
    
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
    
    override fun supportsPredictiveItemAnimations(): Boolean {
    	return false
    }
}
    

 

2. LinearLayoutManagerWrapper를 생성하고, 이를 RecyclerView의 layoutManager에 기존 layoutManager 대신에 집어넣는다.

 

val linearLayoutManagerWrapepr = LinearLayoutManagerWrapper(context!!, LinearLayoutManager.VERTICAL, false)
                                    
...

mRecyclerView.layoutManager = linearLayoutManagerWrapper

...

 

 

<참조> 

https://stackoverflow.com/questions/31759171/recyclerview-and-java-lang-indexoutofboundsexception-inconsistency-detected-in

 

RecyclerView and java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder in

I have a recycler view that works perfectly on all devices except Samsung. On Samsung, I'm get java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter

stackoverflow.com