android - RecyclerView 在 notifyItemInserted(i) 后原item的position没有增加+1?
本文介绍了android - RecyclerView 在 notifyItemInserted(i) 后原item的position没有增加+1?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我的代码描述
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.
解决方案
你可以这样尝试,长按执行插入更新后,点击获取原来的第三个就是现在的第四个的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,具体不明,以上代码可以进行尝试。
这篇关于android - RecyclerView 在 notifyItemInserted(i) 后原item的position没有增加+1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文