【发布时间】:2018-02-20 08:34:42
【问题描述】:
我试图在我的ViewHolder 类中显示一个AlertDialog,在单击接受按钮后,我从项目列表中获取带有getAdapterPosition 的模型项目,但在 Fabric Crashlytics 中我有 13 次崩溃,因为ArrayIndexOutOfBoundsException 表示长度为 12,但请求的索引为 -1,并且在这部分代码中,getPaymentMode 崩溃
class ViewHolder extends RecyclerView.ViewHolder {
TextView time, capacity, description;
View button;
ImageView avatar;
ViewHolder(View v) {
super(v);
time = v.findViewById(R.id.reserve_times_time);
capacity = v.findViewById(R.id.reserve_times_capacity);
button = v.findViewById(R.id.button);
description = v.findViewById(R.id.reserve_times_description);
avatar = v.findViewById(R.id.avatar);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setView(R.layout.layout_dialog);
alertDialogBuilder.setPositiveButton("accept", null);
alertDialogBuilder.setNegativeButton("cancel", null);
final AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.dialog_button_text_size));
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.dialog_button_text_size));
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
getPaymentMode(arrayList.get(getAdapterPosition()), button);
}
});
}
});
}
在RecyclerView 源代码getAdapterPosition 中,当所有者RecyclerView 为空时返回-1,如果活动已关闭,则会发生这种情况,但这是怎么发生的呢?当AlertDialog 显示用户无法关闭活动时!
【问题讨论】:
-
发布
ViewHolder代码 -
问题已编辑@josh_gom3z
-
显示你的 onbind 方法和你设置适配器的位置
-
@Amir_P getAdapterPosition() 是你点击的项目的位置吗?
-
没错@Umair
标签: java android android-recyclerview