gpt4 book ai didi

java.lang.IllegalStateException : Two different ViewHolders have the same stable ID

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

我的应用程序出现以下错误:

java.lang.IllegalStateException: Two different ViewHolders have the same stable ID. Stable IDs in your adapter MUST BE unique and SHOULD NOT change.
ViewHolder 1:ViewHolder{c7b44d1 position=5 id=3, oldPos=-1, pLpos:-1 not recyclable(1)}
View Holder 2:ViewHolder{67232f6 position=3 id=3, oldPos=-1, pLpos:-1}

我正在使用 Mike @github 的 MaterialDrawer,这是我的 View 样本:
public class FavoritesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

TextView Title;
ImageView Pic;

public FavoritesViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
Title = (TextView) itemView.findViewById(R.id.textViewHighlight);
Pic = (ImageView) itemView.findViewById(R.id.imageViewHighlight);

}
}

两个 fragment 正在切换它们的布局,当我按下第一个 fragment 时,它加载没有任何问题,当我按下第二个 fragment 时,它加载不同的布局和 FC 本身。

两个 fragment 都使用相同的 ViewHolder 代码,但在不同的类中。

最佳答案

在我的情况下,我在操作列表项(更改它们的位置)时遇到了这个错误,但是犯了一个错误。我试图创建一个项目的副本并将其添加到顶部:

val oldItem = adapter.getItem(id)
val newItem = oldItem.copy(text = "item updated")
adapter.removeItem(7) // Removed nothing.
adapter.addItem(0, newItem) // Added the item with the same id.
我想删除第 7 项而不是给定 id 的项.所以,我没有删除任何东西( removeItem 在我的代码中如此工作)。然后我添加了一个具有相同 id 的新项目.现在列表包含两个相等的项目并引发错误。因此,更正一个错误以拥有唯一的 id s。
如果你不知道哪里相等 id s 出现,你可以这样做。
设置 adapter.setHasStableIds(false)然后分配一个适配器 RecyclerView :
with(view.recycler_view) {
layoutManager = this@YourFragment.layoutManager
adapter = this@YourFragment.adapter
setHasFixedSize(true)
}
如果设置 setHasStableIds(false)RecyclerView 之后, 你会得到一个 error .
这两个 ViewHolder s 可以是同一类,不能不同。

关于java.lang.IllegalStateException : Two different ViewHolders have the same stable ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650253/

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