gpt4 book ai didi

java - getAdapterPosition 在 ViewHolder 类中返回 -1

转载 作者:行者123 更新时间:2023-12-02 02:18:39 24 4
gpt4 key购买 nike

我正在尝试在我的 ViewHolder 类中显示 AlertDialog,单击接受按钮后,我将使用 getAdapterPosition 获取模型项> 从项目列表中,但在 Fabric Crashlytics 中,由于 ArrayIndexOutOfBoundsException 表示长度为 12 但请求的索引为 -1,并且崩溃发生在 getPaymentMode 中,因此发生了 13 次崩溃这部分代码

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 为 null 时返回 -1,如果 Activity 关闭,则会发生这种情况,但这是如何实现的发生了?当 AlertDialog 显示时用户无法关闭 Activity !

最佳答案

根据docs ,如果您的 View 持有者已被回收,getAdapterPosition() 将返回 NO_POSITION(又名 -1)。

The adapter position of the item if it still exists in the adapter. NO_POSITION if item has been removed from the adapter, notifyDataSetChanged() has been called after the last layout pass or the ViewHolder has already been recycled.

我的猜测是,当您单击对话框按钮时,您的 View 持有者已经被回收。尝试在 onClick() 方法开始时存储位置,然后在需要时使用它,例如:

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int position = getAdapterPosition()
//Your code here
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
getPaymentMode(arrayList.get(position), button);
}
});
}
});

关于java - getAdapterPosition 在 ViewHolder 类中返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48880846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com