【发布时间】:2019-11-22 19:51:00
【问题描述】:
我正在使用 ViewPager2、Kotlin 和 AndroidX。 当适配器不在索引 0 并且我更改适配器列表并将当前项设置为索引 0 时,将引发异常。
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)
在 ViewPager2 的第 537 行有一个 if 导致异常:
// 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.");
}
这就是我更新适配器列表的方式:
adapter.list = newList
adapter.notifyDataSetChanged()
viewpager.setCurrentItem(0, true)
仅当 smoothScroll 设置为 true 时才会发生这种情况
我错过了什么?
编辑:
我正在使用androidx.viewpager2.widget.ViewPager2 中的com.google.android.material:material:1.1.0-alpha08
【问题讨论】:
-
我看到将适配器列表设置为新列表会自动将寻呼机移动到第一项。所以在调用
setCurrentItem时确实没有什么可以滚动的。 -
@glucaio 当新列表的项比前一个列表多时,索引不设置为0。
-
你是对的。我也看到了。可能会提交错误?设置当前项目似乎仍在进行中。
-
@Amir 您可以将您的代码示例项目共享为 git repo 吗?所以我们可以尽力帮助您
标签: android kotlin android-viewpager2