Kod*_*ted 5 android kotlin android-gradle-plugin android-viewpager2
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
}
}
Run Code Online (Sandbox Code Playgroud)
例外
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
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案。显然,在其他配置更改后,您必须恢复 FragmentStateAdapter 的状态才能正确恢复片段。
保存状态
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
model.addState(IDS, pagerAdapter.ids)
model.addState(LIST, (adapter.source as ListAdapterSource).getList())
}
Run Code Online (Sandbox Code Playgroud)
恢复状态
private inner class PagerAdapter : FragmentStateAdapter(this) {
val ids: LongSparseArray<Media> = model.getState(IDS) ?: LongSparseArray()
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1170 次 |
最近记录: |