2017-09-14 63 views
0

我想从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 
+0

从哪里获得'online2_g_sList.get(position)'位置? –

+0

fron onBindViewHolder(最终OnlineAdapter.MyViewHolder持有者,最终int位置) –

回答

0

尝试在此

notifyItemRangeChanged(position, online2_g_sList.size()); 

使用这条线以上这段代码。

notifyItemRangeChanged(position, online2_g_sList.size()); 
online2_g_sList.remove(position); 
notifyItemRemoved(position);` 
+0

请您详细说明差异吗? –

+0

当你尝试删除项目。删除项目之前(notifyItemRangeChanged(position,online2_g_sList.size());)这行更改列表大小的范围,以便只有可用的位置或数组列表的大小在您的数组列表中。 –

+0

谢谢,我在将数据附加到适配器之前将其删除,但这是解决我的问题的方案。 –

0

,如果你想直接从适配器中删除的项,然后它可能给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) 
      } 
})