kotlin - 如何在viewpager2中的FragmentStateAdapter中通知ItemRemove片段
问题描述
我想从 viewpager2 适配器中删除项目,但是当通知适配器(FragmentStateAdapter)活动崩溃并给出以下错误时:
java.lang.IndexOutOfBoundsException: Index: 36, Size: 36
at java.util.ArrayList.get(ArrayList.java:437)
at com.libramee.ui.category.adapter.CategoryPagerAdapter.remove(CategoryPagerAdapter.kt:61)
at com.libramee.ui.home.fragment.HomeFragment$observe$2.onChanged(HomeFragment.kt:218)
at com.libramee.ui.home.fragment.HomeFragment$observe$2.onChanged(HomeFragment.kt:45)
HomeFragment.kx:
deleteCategoryLiveData?.observe(viewLifecycleOwner, Observer {
if (it.status == Response.Status.SUCCESS){
adapter?.remove(it.message ?:"")
}
})
CategoryPagerAdapter.kx
class CategoryPagerAdapter(fragment: Fragment, var categoryFragments: ArrayList<Fragment>) :
FragmentStateAdapter(fragment) {
override fun getItemCount(): Int {
return categoryFragments.size
}
override fun createFragment(position: Int): Fragment {
return categoryFragments.get(position)
}
fun setFragments(categoryFragments: ArrayList<Fragment>){
// this.categoryFragments.clear()
this.categoryFragments.addAll(categoryFragments)
notifyDataSetChanged()
}
fun setNewFragments(categoryFragments: ArrayList<Fragment>){
this.categoryFragments.clear()
this.categoryFragments.addAll(categoryFragments)
notifyDataSetChanged()
}
fun addFragment(categoryFragment: Fragment){
this.categoryFragments.add(categoryFragment)
notifyDataSetChanged()
}
fun remove(index: Int){
if (itemCount > 0) {
this.categoryFragments.removeAt(itemCount - 1)
notifyDataSetChanged()
}
}
fun remove(categoryId: String){
categoryFragments.forEachWithIndex { i, it ->
if (it is CategoryProductFragment){
if (it.categoryId.equals(categoryId)){
categoryFragments.removeAt(i) // i == 34
notifyItemRangeChanged(0, categoryFragments.size)
notifyDataSetChanged()
return@forEachWithIndex
}
}
}
}
fun getAllFragments(): ArrayList<Fragment> {
return categoryFragments
}
}
是使用删除功能和删除索引(i)是34:
fun remove(categoryId: String){
categoryFragments.forEachWithIndex { i, it ->
if (it is CategoryProductFragment){
if (it.categoryId.equals(categoryId)){
categoryFragments.removeAt(i) // i == 34
notifyItemRangeChanged(0, categoryFragments.size)
notifyDataSetChanged()
return@forEachWithIndex
}
}
}
}
我不知道修复此错误! 你知道我该如何解决这个错误吗????
解决方案
推荐阅读
- javascript - 使用 fetch 保留图像元数据
- openfoam - 摆动网格运动
- javascript - React 中的 Socket.IO 连接导致持续重新加载
- python - Poloniex API 使用请求,returnBalances 有效,但 returnTradeHistory 无效
- visual-studio-2017 - 带有 javascript/nodejs 的 VS 2017 扩展
- python-3.x - 将生成器转换为列表,但出现错误:“_io.TextIOWrapper”对象没有属性“解码”(python 3.6.4)
- c++ - 如何使用节点推回队列?
- realm - 领域工作室错误。无法选择类,因为领域未打开
- python - Pandas:按满足条件的列分组
- android - Android Work Manager:我可以强制修剪已完成的作业吗?