최근 크래시 리포트에서 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
...
<참조>