You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从RecyclerView移除项:notifyItemRemoved(I)方法不存在报错求助

解决RecyclerView.Adapter中notifyItemRemoved方法找不到的问题

这个错误我之前排查过好几次,大概率是以下几个常见原因导致的,咱们一步步来解决:

1. 检查RecyclerView依赖版本是否兼容

java.lang.NoSuchMethodError最常见的原因是你使用的RecyclerView库版本太老,notifyItemRemoved(int)这个方法是在较新的Support库(或AndroidX)版本中才引入的。

  • 确保你使用的是AndroidX版本的RecyclerView依赖,不要混合旧的Support库和AndroidX。在build.gradle(Module级别)中更新依赖:
    implementation 'androidx.recyclerview:recyclerview:1.3.2' // 可以替换为最新稳定版
    
  • 同步项目后,清理缓存并重新构建(Build -> Clean Project -> Rebuild Project)。

2. 适配器继承时遗漏泛型声明

看你的代码片段,适配器继承时没有指定泛型:

public class GridRecycleAdapter extends RecyclerView.Adapter

这种写法会导致运行时无法正确匹配方法签名,必须指定自定义的ViewHolder泛型:

public class GridRecycleAdapter extends RecyclerView.Adapter<GridRecycleAdapter.ViewHolder> {
    private final String TAG = "GridRecycleAdapter";
    private ArrayList<Item> items;

    // 必须定义自定义ViewHolder类
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // 初始化你的Item视图控件
        public ViewHolder(View itemView) {
            super(itemView);
            // 比如:TextView tvTitle = itemView.findViewById(R.id.tv_title);
        }
    }

    // 重写Adapter的核心方法(补全你的代码)
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.your_grid_item_layout, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Item currentItem = items.get(position);
        // 绑定数据到ViewHolder的控件上
    }

    @Override
    public int getItemCount() {
        return items != null ? items.size() : 0;
    }

    // 正确的移除项方法
    public void removeItem(int position) {
        if (position >= 0 && position < items.size()) {
            items.remove(position);
            notifyItemRemoved(position);
            // 通知后续项的位置更新,避免索引混乱
            notifyItemRangeChanged(position, items.size());
        }
    }
}

3. 混淆配置导致方法被移除

如果你的项目开启了代码混淆(ProGuard/R8),可能会把notifyItemRemoved这类方法误删除。在proguard-rules.pro中添加以下规则,保留RecyclerView.Adapter的核心方法:

-keep class androidx.recyclerview.widget.RecyclerView$Adapter {
    public void notifyItemRemoved(int);
    public void notifyItemRangeChanged(int, int);
    public void notifyItemInserted(int);
}

4. 检查方法调用是否有误

最后快速确认一下,你调用的确实是notifyItemRemoved(position),有没有拼写错误(比如少写了末尾的d写成notifyItemRemove)?这种低级错误偶尔也会出现。


内容的提问来源于stack exchange,提问作者Nadimibox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:05:11