NotifyItemRemoved 抛出异常

NotifyItemRemoved throws an exception

我有这样的问题。我有一个简单的壁纸应用程序。 我正在从 API 获取壁纸,有一个名为 CategoryTab,其中我有 Sections 我想隐藏一些 SectionsCategory 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)