Issue
I'm using ViewPager2, Kotlin and AndroidX. When the adapter is not at index 0 and I change the adapter list and set current item to index 0 the exception is thrown.
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.widget.ViewPager2.updateCurrentItem(ViewPager2.java:538)
at androidx.viewpager2.widget.ViewPager2$4.onAnimationsFinished(ViewPager2.java:518)
at androidx.recyclerview.widget.RecyclerView$ItemAnimator.isRunning(RecyclerView.java:13244)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:515)
at android.view.View.layout(View.java:15596)
In line 537 of ViewPager2 there is an if which causes the exception:
// Extra checks verifying assumptions
// TODO: remove after testing
View snapView1 = mPagerSnapHelper.findSnapView(mLayoutManager);
View snapView2 = mLayoutManager.findViewByPosition(snapPosition);
if (snapView1 != snapView2) {
throw new IllegalStateException("Design assumption violated.");
}
This is how I'm updating the adapter list:
adapter.list = newList
adapter.notifyDataSetChanged()
viewpager.setCurrentItem(0, true)
It happens only when smoothScroll
is set to true
What am I missing?
Edit :
I'm using androidx.viewpager2.widget.ViewPager2
available in com.google.android.material:material:1.1.0-alpha08
Solution
I had this same problem with ViewPager2 on configuration change. I'm using:
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta03'
In my case, I had overridden the getItemId()
method in my FragmentStateAdapter class. When I got rid of my getItemId()
method, the "IllegalStateException: Design assumption violated" error was no more! :-)
Answered By - ban-geoengineering
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.