NotifyItemRemoved 抛出异常
NotifyItemRemoved throws an exception
我有这样的问题。我有一个简单的壁纸应用程序。
我正在从 API
获取壁纸,有一个名为 Category
的 Tab
,其中我有 Sections
我想隐藏一些 Sections
在 Category
Tab
.
在最好的情况下,我的后端开发人员必须从后端隐藏或删除它,但因为他现在不可用。我决定自己做。
所以,在 RecyclerView
for Category
Tab
in onBindViewHolder
我正在检查标题是否与我要删除的标题相同我正在调用 removeAt
(你可以在下面看到那部分):
if (categoryTitle.equals("Hot")) {
list.removeAt(holder.layoutPosition)
}
我需要在 Category
Tab
显示时调用它,这样用户就看不到 Category
Section
。但它不会更新它,因为我也必须调用这两个方法:
if (categoryTitle.equals("Hot")) {
list.removeAt(holder.layoutPosition)
notifyItemRemoved(holder.layoutPosition)
notifyItemRangeChanged(holder.layoutPosition, list.size)
}
但是在打电话给他们时我收到错误提示
"Cannot call this method while RecyclerView is computing a layout or scrolling . . ."
问题来了。
我必须在哪里调用它以避免错误?
(link 我的应用程序:
https://play.google.com/store/apps/details?id=com.backpaper)
(请不要建议使用计时器或延迟或类似的东西(-_-)
)
更新:
override fun onResponse(categories: Categories) {
categories.categories!!.removeAt(5)
categories.categories!!.removeAt(1)
adapter = RecyclerViewAdapterC(categories.categories!!)}
不要删除 onBindViewHolder()
中的项目它会抛出异常,因为项目尚未添加。例外将是。
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
您应该先从数据集中删除项目,然后再将它们添加到适配器。
if (!categoryTitle.equals("Hot")) {
// Add item else do not add item
}
过滤列表数据集后,然后使用过滤后的列表设置适配器。
下面是一个例子。
ArrayList<String> list=new ArrayList();
for(String cat : categories.categories){
if (!categoryTitle.equals("Hot")) {
list.add(cat);
}
}
adapter = RecyclerViewAdapterC(list)
我有这样的问题。我有一个简单的壁纸应用程序。
我正在从 API
获取壁纸,有一个名为 Category
的 Tab
,其中我有 Sections
我想隐藏一些 Sections
在 Category
Tab
.
在最好的情况下,我的后端开发人员必须从后端隐藏或删除它,但因为他现在不可用。我决定自己做。
所以,在 RecyclerView
for Category
Tab
in onBindViewHolder
我正在检查标题是否与我要删除的标题相同我正在调用 removeAt
(你可以在下面看到那部分):
if (categoryTitle.equals("Hot")) {
list.removeAt(holder.layoutPosition)
}
我需要在 Category
Tab
显示时调用它,这样用户就看不到 Category
Section
。但它不会更新它,因为我也必须调用这两个方法:
if (categoryTitle.equals("Hot")) {
list.removeAt(holder.layoutPosition)
notifyItemRemoved(holder.layoutPosition)
notifyItemRangeChanged(holder.layoutPosition, list.size)
}
但是在打电话给他们时我收到错误提示
"Cannot call this method while RecyclerView is computing a layout or scrolling . . ."
问题来了。 我必须在哪里调用它以避免错误?
(link 我的应用程序: https://play.google.com/store/apps/details?id=com.backpaper)
(请不要建议使用计时器或延迟或类似的东西(-_-)
)
更新:
override fun onResponse(categories: Categories) {
categories.categories!!.removeAt(5)
categories.categories!!.removeAt(1)
adapter = RecyclerViewAdapterC(categories.categories!!)}
不要删除 onBindViewHolder()
中的项目它会抛出异常,因为项目尚未添加。例外将是。
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
您应该先从数据集中删除项目,然后再将它们添加到适配器。
if (!categoryTitle.equals("Hot")) {
// Add item else do not add item
}
过滤列表数据集后,然后使用过滤后的列表设置适配器。
下面是一个例子。
ArrayList<String> list=new ArrayList();
for(String cat : categories.categories){
if (!categoryTitle.equals("Hot")) {
list.add(cat);
}
}
adapter = RecyclerViewAdapterC(list)