Android ArrayIndexOutOfBoundsException:长度=12;“从警报中删除位置”对话框中的索引=-1

Android ArrayIndexOutOfBoundsException:长度=12;“从警报中删除位置”对话框中的索引=-1,android,android-studio,android-alertdialog,android-recyclerview,Android,Android Studio,Android Alertdialog,Android Recyclerview,我想通过警报对话框删除项目。在我单击“是”的同时,我的应用程序崩溃,但该项目同时被删除,这是我想要的,减去崩溃 下面我贴了我的回收袋 这是我的密码: public RecycleAdapter(ArrayList<RetrieveRunnerActivity> arrayList, Context context, Cursor cursor, OnItemClickListener deleteListener) { this.arrayList = arrayL

我想通过警报对话框删除项目。在我单击“是”的同时,我的应用程序崩溃,但该项目同时被删除,这是我想要的,减去崩溃

下面我贴了我的回收袋

这是我的密码:

   public RecycleAdapter(ArrayList<RetrieveRunnerActivity> arrayList, Context context, Cursor cursor, OnItemClickListener deleteListener) {
    this.arrayList = arrayList;
    this.context = context;
    this.cursor = cursor;
    this.deleteListener = deleteListener;
}



private OnItemClickListener deleteListener;


public interface OnItemClickListener {
    void onDeleteClick(int position);


}


public void setItemListener(OnItemClickListener listener) {
    deleteListener = listener;


}

public RecycleAdapter(ArrayList<RetrieveRunnerActivity> arrayList) {
    this.arrayList = arrayList;


}


@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.history, parent, false);
    RecyclerViewHolder RVH = new RecyclerViewHolder(view, deleteListener, context, arrayList);

    return RVH;
}


@Override
public void onBindViewHolder(RecycleAdapter.RecyclerViewHolder holder, int position) {

    RetrieveRunnerActivity retrieveRunnerActivity = arrayList.get(position);
    holder.Duration_column.setText(String.valueOf(retrieveRunnerActivity.getElapsed_time()));
    holder.Distance_column.setText(String.valueOf(retrieveRunnerActivity.getTotal_distance()));
    holder.date_heading.setText(String.valueOf(retrieveRunnerActivity.getDate()));
    holder.Entry_column.setText(String.valueOf(retrieveRunnerActivity.getId()));
    holder.deleteButton.getContext();

}


@Override
public int getItemCount() {
    return arrayList.size();
}

public class RecyclerViewHolder extends RecyclerView.ViewHolder {

    ImageView deleteButton;
    TextView Duration_column, Distance_column, date_heading, Entry_column;
    RunoraDatabaseHelper Runora_database;


    RecyclerViewHolder(final View view, final OnItemClickListener listener, final Context context, final ArrayList arrayList) {

        super(view);
        Duration_column = view.findViewById(R.id.Duration_column);
        Distance_column = view.findViewById(R.id.Distance_column);
        date_heading = view.findViewById(R.id.date_heading);
        Entry_column = view.findViewById(R.id.Entry_column);
        deleteButton = view.findViewById(R.id.deleteButton);
        deleteButton.setTag(deleteListener);
        final RecycleAdapter adapter = new RecycleAdapter(arrayList);
        Runora_database = new RunoraDatabaseHelper(context);



            deleteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                    AlertDialog.Builder dialogbuilder = new AlertDialog.Builder(context);
                    dialogbuilder.setMessage("Delete activity permanently")
                            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(final DialogInterface dialog, int
                                        position) {
                                    Runora_database.DeleteData(Entry_column.getText().toString());
                                    listener.onDeleteClick(position);
                                    adapter.notifyDataSetChanged();

                                }
                            })
                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {

                                }
                            });
                    AlertDialog alertDialog = dialogbuilder.create();
                    alertDialog.show();
我已经在这上面呆了一段时间了。感谢您的帮助。

正确答案:

我改变了这一点:

listener.onDeleteClick(position);
为此:

listener.onDeleteClick(getAdapterPosition());

侦听器中的位置。onDeleteClick(位置)指的是与AdapterPosition不同的对话侦听器谢谢。我将位置更改为getadapterposition。非常感谢Hooman。对话框click listener中的变量名是错误的,这就是造成这种混乱的原因。第二个参数的标准名称是
,它是指单击对话框上的哪个按钮。您正在单击“正按钮”,然后进入对话框界面。正按钮的值为
-1
。谢谢你,本。我已经做了必要的改变。
listener.onDeleteClick(getAdapterPosition());