2017-09-14 75 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) 
      } 
})