RecyclerView 在 notifyItemInserted(i) 后原item的position没有增加+1?

发布于 2022-09-02 20:33:40 字数 1350 浏览 14 评论 0

我的代码描述

RecyclerView 的 Adapter 中 onBindViewHolder 方法中,我为 viewHolder.itemView 注册了 setOnLongClickListener 事件,功能是数据源add一个item,然后调用notifyItemInserted(position)。

我的代码片段

public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
    viewHolder.mTextViewTitle.setText(datas.get(position).Title);
    viewHolder.mTextViewContent.setText(datas.get(position).Content);
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "haha" + position, Toast.LENGTH_SHORT).show();
            datas.get(position).Title = "被点的改变了!";
            notifyItemChanged(position);
        }
    });
    viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            datas.add(position, new NewsEntity("我是新来的!", "请多多指教!"));
            notifyItemInserted(position);
            Toast.makeText(viewHolder.itemView.getContext(), "Position:" + position, Toast.LENGTH_SHORT).show();
            return true;
        }
    });
}

出现的问题

在第三个item上长按(position=2),会在前面插入一个item,那么被长按的那个我理解的是应该 position + 1 =3 ,而事实上我再长按一次时Toast出的position没有变化,还是2。
请问是我代码写的有问题,还是事实就是这样,如果事实是这样的话,我怎么才能让position加1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枯寂 2022-09-09 20:33:40

你可以这样尝试,长按执行插入更新后,点击获取原来的第三个就是现在的第四个的position,看是否改变为(3)了。

public void addData(int pos){

    mDatas.add(pos,'Insert One');

    notifyItemInserted(pos);

    // 加入如下代码保证position的位置正确性

    if (pos != mDatas.size() - 1) {

        notifyItemRangeChanged(pos, mDatas.size() - pos);

    }

}



public void deleteData(int pos){

    mDatas.remove(pos);

    notifyItemRemoved(pos);

    // 加入如下代码保证position的位置正确性

    if (pos != mDatas.size() - 1) {

        notifyItemRangeChanged(pos, mDatas.size() - pos);

    }

}

这是网上截取的代码,好像是证明了这个BUG的存在,不过官方文档说position会自动+1,具体不明,以上代码可以进行尝试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文