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

在Android中使用notifyItemRemoved或notifyDataSetChanged与RecyclerView

东方富
2023-03-14

我正在创建一个使用RecyclerView显示的卡片列表,其中每个卡片都有一个按钮,可以从列表中删除该卡片。

是否有人有使用notifyItemRemoved()的经验,并且知道它的行为与NotifyDataSetChanged不同的原因?

下面是我正在使用的一些代码:

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
    if(position >0){
        RiskViewHolder riskHolder = (RiskViewHolder)holder;
        final int index = position - 1;
        final DetectedIssue anIssue = issues.get(index);

        riskHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    int index = issues.indexOf(anIssue);
                    issues.remove(anIssue);
                    notifyItemRemoved(index);

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

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

共有1个答案

穆睿才
2023-03-14

可以从RecyclerView.ViewWholder中使用GetAdapterPosition()

getLayoutPosition()提供项在布局中的准确位置,代码

holder.removeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Position for remove
                int modPosition= holder.getAdapterPosition();
                //remove item from dataset
                numbers.remove(modPosition);
                //remove item from recycler view
                if(numbers.isEmpty())
                  notifyDataSetChanged () 
                else
                  notifyItemRemoved(modPosition);
                
            }
        });
 类似资料:
  • 我有一个带有适配器和ViewHolder类的RecyclerView,所以它是3个类,我在我的ViewHolder中添加了一个onLongClick,当它被长时间单击时,所选项目将被删除,我删除它如下所示: 项目: > Item_1 Item_2 Item_3 Item_4 Item_5 我的数据项大约有7项,所以下面是发生的情况。第一次删除时,它会删除正确的项目;当您再次单击“删除”时,它将删除

  • 我正在通过以下方式向RecyclerView插入值 但该项目未插入或我在UI中未显示任何更新 有谁能帮我解决这个问题吗 当插入或删除任何新用户时,将执行此UserEvents接口的方法 但不知道为什么回收器不更新

  • 问题内容: 11-06 19:52:25.958:E / AndroidRuntime(29609):java.lang.IllegalStateException:适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。[在ListView(-1,类android.widget.ListPopupWindow $ DropDownListView

  • 问题内容: 现在,我使用setAdapter更新我的ListView,但我认为正确的方法是使用notifiyDatasetChanged(),但我无法在主类中使用它(它在适配器中)。这是错误: ListAdapter类型的方法notifyDatasetChanged()未定义 我猜想有一种更好的方法-有人能指出我正确的方向吗? 这是我的代码的相关部分: 这是适配器: 问题答案: 创建您的自定义适配

  • 我知道有很多关于这个话题的问题,但我还是找不到一个解决办法。 我有一个应用程序,可以加载和显示图像(就像智能手机上的常规图库应用程序一样) 我加载了背景中的所有图像与协同线-在这个过程的这个阶段没有问题。 当我通知适配器有关数据时就会出现问题。notifyDataSetChanged()调用会冻结UI一段时间。 我们讨论的是相对较大的网格(例如1000+张照片) 其他线程中的几乎所有答案都建议,我