I do an item removal method
@Override public void remove(int position) { Log.d("myLog", "lol remove"); itemList.itemQuestions.remove(position); rvQuestionAdapter.notifyItemRemoved(position); new SaveAndLoad(getView().getContext()).Save(itemList); }
Here is the adapter itself
rvQuestionAdapter = new RVQuestionAdapter(itemList, view.getContext(), this); public class RVQuestionAdapter extends RecyclerView.Adapter<RVQuestionAdapter.ViewHolder> { itemList itemList = null; Context context; Resources resources; AddElementFragment addElementFragment; InterfaceAddFragment listener; public RVQuestionAdapter(itemList itemList, Context context, InterfaceAddFragment listener) { this.itemList = itemList; this.context = context; this.listener = listener; //this.addElementFragment = addElementFragment; resources = context.getResources(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView textViewQuestion; LinearLayout CardDetail; ImageView open; LinearLayout edit; LinearLayout remove; TextView TrueAnswer; TextView FalseAnswer; TextView Result; ImageView Refresh; View view; ViewHolder(View itemView) { super(itemView); textViewQuestion = (TextView) itemView.findViewById(R.id.textViewQuestion); CardDetail = (LinearLayout) itemView.findViewById(R.id.CardDetail); open = (ImageView) itemView.findViewById(R.id.open); edit = (LinearLayout) itemView.findViewById(R.id.edit); remove = (LinearLayout) itemView.findViewById(R.id.remove); TrueAnswer = (TextView) itemView.findViewById(R.id.textViewTrue); FalseAnswer = (TextView) itemView.findViewById(R.id.textViewFalse); Result = (TextView) itemView.findViewById(R.id.textViewResult); Refresh = (ImageView) itemView.findViewById(R.id.refresh); view = itemView; } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_question_card, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { holder.textViewQuestion.setText(itemList.itemQuestions.get(position).question); holder.TrueAnswer.setText(resources.getString(R.string.text_TrueAnswer) + " " + itemList.itemQuestions.get(position).True); holder.FalseAnswer.setText(resources.getString(R.string.text_FalseAnswer) + " " + itemList.itemQuestions.get(position).False); holder.Result.setText(resources.getString(R.string.text_Result) + " " + new GetEvaluation(itemList.itemQuestions.get(position), resources).Text()); holder.open.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (holder.CardDetail.getVisibility() == View.GONE) { ExpandAndCollapce.expand(holder.CardDetail, 500); ObjectAnimator rotation = ObjectAnimator.ofFloat(v, "rotation", 180); rotation.setDuration(500); rotation.start(); } else { ExpandAndCollapce.collapse(holder.CardDetail, 500); ObjectAnimator rotation = ObjectAnimator.ofFloat(v, "rotation", 0); rotation.setDuration(500); rotation.start(); } } }); holder.edit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.editQuestion(position); } }); holder.remove.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.remove(position); } }); holder.Refresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.refreshQuestion(position); } }); } @Override public int getItemCount() { return itemList.itemQuestions.size(); } }
And for example, I deleted one item from the list, and then I want to get the last item, it gives me
08-06 18:35:15.862 26812-26812/ru.landmarkstd.educt E/AndroidRuntime: FATAL EXCEPTION: main Process: ru.landmarkstd.educt, PID: 26812 Theme: themes:{default=overlay:com.baranovgroup.nstyle, iconPack:com.baranovgroup.nstyle, fontPkg:com.baranovgroup.nstyle, com.android.systemui=overlay:com.baranovgroup.nstyle, com.android.systemui.navbar=overlay:com.baranovgroup.nstyle} java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at ru.landmarkstd.educt.Fragments.AddElementFragment.editQuestion(AddElementFragment.java:122) at ru.landmarkstd.educt.Adapters.RVQuestionAdapter$2.onClick(RVQuestionAdapter.java:125) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21158) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
itemList
public class itemList implements Parcelable { public String nameList; public String Tag; public ArrayList<itemQuestion> itemQuestions; public int id; public itemList(String nameList, String Tag, ArrayList<itemQuestion> itemQuestions, int id) { this.nameList = nameList; this.Tag = Tag; this.itemQuestions = itemQuestions; this.id = id; } protected itemList(Parcel in) { nameList = in.readString(); Tag = in.readString(); } public static final Creator<itemList> CREATOR = new Creator<itemList>() { @Override public itemList createFromParcel(Parcel in) { return new itemList(in); } @Override public itemList[] newArray(int size) { return new itemList[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(nameList); dest.writeString(Tag); } }