当前位置: 首页 > 知识库问答 >
问题:

在RecyclerView Android的OnBindViewWholder方法中从列表中删除项

干茂才
2023-03-14

好的,所以这有点复杂,我有一个自定义的RecolyerView适配器,在OnBindViewWholder方法中,我希望根据一些不同的变量从RecolyerView中删除当前项,但当我从ArrayList中删除该项并调用NotifyDataSetChanged()时;得到:java.lang.IllegalStateException:在RecolyerView计算布局或滚动时不能调用该方法

如何从OnBindViewWholder中的RecyclerView中删除该项?,我不想在设置适配器之前这样做,因为recyclerview中的每个项都有一个子列表,如果子列表为空,我想删除该项。谢谢你的点子,很抱歉英语不好。

共有1个答案

阴靖
2023-03-14

请按照下面使用的方法,如本答案所示。

private List<DetectedIssue> issues = new ArrayList<DetectedIssue>();

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element

    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                issues.remove(position);
                notifyItemRemoved(position);
                //this line below gives you the animation and also updates the
                //list items after the deleted item
                notifyItemRangeChanged(position, getItemCount());

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    });
}

 @Override
 public int getItemCount() {
    return issues.size();
 }

PS:从文档中可以看出,如果在运行不必要的进程时只添加、移动或删除一个项目,那么使用notifyDataSetChanged()是很糟糕的做法。

此事件没有指定数据集发生了什么变化,迫使任何观察者假设所有现有的项和结构可能不再有效。LayoutManager将被迫完全重新绑定和中继所有可见视图。

 类似资料:
  • 问题内容: 如果想基于每个嵌套列表的第一个元素评估重复项,谁能提出一个好的解决方案从嵌套列表中删除重复项? 主列表如下所示: 如果已经在第一位置出现了另一个具有相同元素的列表,那么我想删除该列表并得到以下结果: 您可以建议一种算法来实现此目标吗? 问题答案: 您是否关心保留订单/删除了哪些重复项?如果不是,则: 会做的。如果您想保留订单并想保留第一个订单,则:

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 这是一个类似问题的后续问题,该问题询问最佳书写方式 似乎共识是关于 但是,我认为如果只删除一些项目,则大多数项目都将被复制到同一对象中,这可能很慢。在回答另一个相关问题时,有人建议: 但是,此处将搜索列表长度为O(N)的项目。可能我们的局限在于列表以数组而不是链接列表的形式表示,因此删除项目将需要在列表之后移动所有内容。但是,这里建议将collections.dequeue表示为双链表

  • 问题内容: 当我用Python编写代码时,经常需要根据某些条件从列表或其他序列类型中删除项目。我还没有找到一种优雅而有效的解决方案,因为从当前正在迭代的列表中删除项目是很糟糕的。例如,您不能执行以下操作: 我通常会做这样的事情: 这是低效的,相当丑陋,甚至可能有错误(它如何处理多个“ John Smith”条目?)。有没有人有一个更优雅的解决方案,或者至少是一个更有效的解决方案? 与字典配合使用的

  • 我试图从ArrayList中删除所有奇数,并且它必须是for或Fore每循环。循环结束后,ArrayList中剩余的数字的结果将7, 90, 55, 60。当我设定一个条件时: 一切工作正常。所有偶数都被删除,但在第一个示例中,奇数的情况并非如此。为什么会发生这种情况?

  • 问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组