【问题标题】:FragmentStateAdapter throws java.lang.IllegalStateException: Design assumption violated after configuration changeFragmentStateAdapter 抛出 java.lang.IllegalStateException:配置更改后违反设计假设
【发布时间】:2019-08-05 05:04:01
【问题描述】:

FragmentStateAdapter 抛出

java.lang.IllegalStateException:违反设计假设,

当设备旋转时。我该如何解决这个问题?

private inner class PagerAdapter : FragmentStateAdapter(this) {
        private val ids = LongSparseArray<Media>()

        override fun getItemCount(): Int = adapter.itemCount

        override fun getItemId(position: Int): Long {
            return adapter.source!![position].time
        }

        override fun containsItem(itemId: Long): Boolean {
            return ids[itemId] != null
        }
    }

例外

 java.lang.IllegalStateException: Design assumption violated.
        at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:270)
        at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:259)
        at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:68)

【问题讨论】:

  • 发布你的 gradle 文件
  • 错误日志指向 FragmentStateAdapter 中的方法 placeFragmentInViewHolder 中的错误,该错误在您的代码中丢失。请在您的代码中包含该方法。

标签: android kotlin android-gradle-plugin android-viewpager2


【解决方案1】:

我找到了解决方案。显然,您必须在其他配置更改后恢复 FragmentStateAdapter 的状态才能正确恢复片段。

保存状态

override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        model.addState(IDS, pagerAdapter.ids)
        model.addState(LIST, (adapter.source as ListAdapterSource).getList())
    }

恢复状态

private inner class PagerAdapter : FragmentStateAdapter(this) {
        val ids: LongSparseArray<Media> = model.getState(IDS) ?: LongSparseArray()
        ...
}

【讨论】:

    【解决方案2】:

    此问题现已在ViewPager2 中修复

    你需要使用Version 1.0.0-beta03

    更新ViewPager2dependencies

     dependencies {
        implementation 'androidx.viewpager2:viewpager2:1.0.0-beta03'
     }
    

    错误修复

    • 修复了 FragmentStateAdapter 瞬态 Fragment 状态的问题。 b/134246546

    【讨论】:

    • 显然我在 ViewPager2 1.0.0 稳定版本中遇到了同样的问题。不知道为什么会这样。
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多