Android 从回收器视图中删除项目会生成错误
我想从RecyclerView中删除某些项目。我可以一次删除一个项目,但无法一次删除多个项目。以下是删除项目的代码:Android 从回收器视图中删除项目会生成错误,android,android-recyclerview,Android,Android Recyclerview,我想从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) {
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
以下是删除项目时出现的错误:
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
如果您试图直接从适配器中删除该项,则可能会出现indexoutofbound异常 您需要做的是创建一个接口,该接口由recyclerview的父级实现,并在创建期间将其传递给recycler适配器,然后当您例如侦听recycler项中的remove按钮时,调用该项的interface方法,然后父级将删除该项并通知
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)
}
})
请在下面的示例中尝试此代码
notifyItemRangeChanged(position, online2_g_sList.size());
用上面这行
notifyItemRangeChanged(position, online2_g_sList.size());
online2_g_sList.remove(position);
notifyItemRemoved(position);`
您从哪里获得online2\u g\u列表中的位置。获取(位置)?从BindViewHolder(final OnlineAdapter.MyViewHolder holder,final int position)开始,当您尝试删除项目时,请详细说明差异。在删除项(notifyItemRangeChanged(position,online2_g_sList.size());)之前,此行更改列表大小的范围,以便只有可用的位置或数组列表大小在数组列表中。谢谢,我在将数据附加到适配器之前删除了数据,但这是解决我问题的方法。