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());