gpt4 book ai didi

android - SortedList IndexOutOfBoundsException:检测到不一致。删除最后一个项目时的项目位置无效

转载 作者:行者123 更新时间:2023-12-02 13:00:26 26 4
gpt4 key购买 nike

我无休止地滚动了RecyclerView。数据存储在SortedList中。当用户向下滚动时,加载项会出现,然后加载下10个项时会消失。删除LoaderItem时出现以下错误:

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 10(offset:-1).state:11
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5512)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5448)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5444)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3551)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3030)
at android.view.View.measure(View.java)

这是我的代码:

适配器:
val battles = SortedList(RecyclerViewItem::class.java, object : SortedListAdapterCallback<RecyclerViewItem>(this)
{
override fun areItemsTheSame(item1 : RecyclerViewItem?, item2 : RecyclerViewItem?) : Boolean
{
if (item1 is Battle && item2 is Battle && item1.id == item2.id) return true
if (item1 is LoaderItem && item2 is LoaderItem) return true
return false
}

override fun compare(o1 : RecyclerViewItem?, o2 : RecyclerViewItem?) : Int =
if (o1 is Battle && o2 is Battle)
{
when
{
o1.points > o2.points -> 1
o1.points == o2.points -> 0
else -> -1
}
}
else -1
override fun areContentsTheSame(oldItem : RecyclerViewItem?, newItem : RecyclerViewItem?) : Boolean = if (oldItem is LoaderItem) true
else (oldItem as Battle).points == (newItem as Battle).points

})

fun removeLoadingItem()
{
(0 until battles.size()).filter { battles[it] is LoaderItem }.forEach { battles.removeItemAt(it) }
}

fun addDownloadedItems(battles : List<Battle>)
{
this.battles.addAll(battles)
}

片段:
override fun displayDownloadedBattles(battles : List<Battle>, isMore : Boolean) {
pbLoader.visibility = View.GONE
isLoading = false
if (isMore)
adapter.removeLoadingItem()
adapter.addDownloadedItems(battles)
}

最佳答案

  (0 until battles.size()).filter { battles[it] is LoaderItem }.forEach { battles.removeItemAt(it) }

该片段包含错误:首次删除后,索引顺序不正确。
您可以循环使用。
为什么不使用
battles.filter { it is LoaderItem }.forEach { battles.remove(it) }

关于android - SortedList IndexOutOfBoundsException:检测到不一致。删除最后一个项目时的项目位置无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com