从回收站视图中删除项目会生成错误
我想从RecyclerView中删除某些项目。我可以一次删除单个项目,但无法一次删除多个项目。下面是去除项目代码:从回收站视图中删除项目会生成错误
final Online2_G_S online2_g_s = online2_g_sList.get(position);
if (online2_g_s.getpMrp()==0){
removeItem(holder.getAdapterPosition());
}
private void removeItem(final int position) {
new Handler().post(new Runnable() {
@Override
public void run() {
try{
Log.i("sand36", String.valueOf(position)+" "+online2_g_sList.get(position));
online2_g_sList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, online2_g_sList.size());
}catch (Exception e){
Log.i("sand36", String.valueOf(e));
}
}
});
,这里是我同时去除项目得到的错误:
09-14 09:09:36.816 26394-26394/com.parse.AwaazDo I/sand36: java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4
09-14 09:09:36.817 26394-26394/com.parse.AwaazDo I/sand36: java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
09-14 09:09:36.870 26394-26394/com.parse.AwaazDo I/sand36: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
尝试在此
notifyItemRangeChanged(position, online2_g_sList.size());
使用这条线以上这段代码。
notifyItemRangeChanged(position, online2_g_sList.size());
online2_g_sList.remove(position);
notifyItemRemoved(position);`
请您详细说明差异吗? –
当你尝试删除项目。删除项目之前(notifyItemRangeChanged(position,online2_g_sList.size());)这行更改列表大小的范围,以便只有可用的位置或数组列表的大小在您的数组列表中。 –
谢谢,我在将数据附加到适配器之前将其删除,但这是解决我的问题的方案。 –
,如果你想直接从适配器中删除的项,然后它可能给indexoutofbound异常。
你需要做的是创建一个由recyclerview的父级实现的接口,并在创建过程中将其传递给回收站适配器,然后当您例如在回收器项目中侦听移除按钮时,调用接口方法该项目,然后父母将删除该项目并通知。
public interface OnRecyclerItemInteraction{
public void onItemRemoveClicked(Online2_G_S item);
}
在你的父类的实现:
@override
public void onItemRemoveClicked(Online2_G_S item){
int index = yourList.indexOf(item);
yourList.remove(item);
yourAdapter.notifyItemRemoved(index);
}
终于在bindViewHolder:
closeButton.setOnClickListener(new OnClickListener{
@Override
public void onClick(View view) {
itemInteraction.onItemRemoveClicked(thisViewsItem)
}
})
从哪里获得'online2_g_sList.get(position)'位置? –
fron onBindViewHolder(最终OnlineAdapter.MyViewHolder持有者,最终int位置) –