从RecyclerView中删除项目会抛出OutOfBounds异常

时间:2015-01-18 22:22:09

标签: android android-recyclerview recycler-adapter

我的RecyclerView填充了CardView。在onLongClick的{​​{1}}方法中,我打开一个对话框,其中包含删除该卡的选项,但我遇到了应用程序崩溃的问题。如果我有多张卡并一次删除一张,当我尝试连续删除多张卡时,它有时会抛出CardViewIndexOutOfBoundsExceptions

重要的是要注意,如果我删除一个,保留该活动然后返回,当我尝试删除另一个时,一切都会好的。这是因为适配器正在被新的替换?

我不确定如何解决问题。任何建议表示赞赏。谢谢!

另外,另一个快速问题:在适配器中我可以实现一个方法,使用CursorIndexOutOfBoundsExceptions查看是否没有卡,然后膨胀新的布局?目前,我在getItemCount类中有类似于imeplemented的实例化和分配此适配器的东西,但除非重新创建活动,否则它将不起作用。

以下是我的适配器类中的大多数代码,它扩展了Fragment

RecyclerView.Adapter<SessionAdapter.ViewHolder>

1 个答案:

答案 0 :(得分:0)

对于prob ...在适配器中我可以实现一个使用getItemCount来查看是否没有卡的方法。 您可以在recyclelerview的onCreateViewHolder中执行此操作...

onCreateViewHolder(ViewGroup parent,int position){ 查看v;

if(getItemCount==0){
  v = LayoutInflater.from(context).inflate(R.layout.some_layout, parent,false);
}else{
  v = LayoutInflater.from(context).inflate(R.layout.some_other_layout, parent,false);
   ViewHolder holder = new ViewHolder(v);
return holder;
}

对于例外问题当从recyclerview中删除项目时,会分配新位置,但是arraylist管理索引本身,因此在调用notifyItemRemoved之后,您应该调用notifyDataSetChanged,以便将位置重新分配给所有视图...

dialog.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    //delete from SQLite database
                    dialog.dismiss();
                    mArrayList.remove(viewHolder.getPosition());
recyclerview.removeViewAtIndex(viewHolder.getPosition());
notifyDataSetChanged();
                    adapter.notifyItemRemoved(viewHolder.getPosition());
                }
            });