我的RecyclerView
填充了CardView
。在onLongClick
的{{1}}方法中,我打开一个对话框,其中包含删除该卡的选项,但我遇到了应用程序崩溃的问题。如果我有多张卡并一次删除一张,当我尝试连续删除多张卡时,它有时会抛出CardView
或IndexOutOfBoundsExceptions
。
重要的是要注意,如果我删除一个,保留该活动然后返回,当我尝试删除另一个时,一切都会好的。这是因为适配器正在被新的替换?
我不确定如何解决问题。任何建议表示赞赏。谢谢!
另外,另一个快速问题:在适配器中我可以实现一个方法,使用CursorIndexOutOfBoundsExceptions
查看是否没有卡,然后膨胀新的布局?目前,我在getItemCount
类中有类似于imeplemented的实例化和分配此适配器的东西,但除非重新创建活动,否则它将不起作用。
以下是我的适配器类中的大多数代码,它扩展了Fragment
:
RecyclerView.Adapter<SessionAdapter.ViewHolder>
答案 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());
}
});