2017-09-14 7 views
0

リサイクルビューから特定のアイテムを削除します。一度に1つのアイテムを削除できますが、複数のアイテムを一度に削除することはできません。以下の項目を除去するためのコードです:リサイクラービューからアイテムを削除するとエラーが発生します

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); 
} 

あなたbindViewHolderでようやく
@override 
public void onItemRemoveClicked(Online2_G_S item){ 
    int index = yourList.indexOf(item); 
    yourList.remove(item); 
    yourAdapter.notifyItemRemoved(index); 
} 

closeButton.setOnClickListener(new OnClickListener{ 
    @Override 
      public void onClick(View view) { 
       itemInteraction.onItemRemoveClicked(thisViewsItem) 
      } 
}) 
関連する問題