我正在制作一个待办事项列表应用程序,如果我单击a中RecyclerView
的一个项目,Dialog
将会弹出一个菜单,可让您编辑该任务的名称。在某些任务上,当我接受更改时,应用程序将崩溃,并且会弹出此堆栈跟踪。
10-02 15:10:34.801 9701-9701/com.gigstudios.todolist E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gigstudios.todolist, PID: 9701
java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
at java.util.ArrayList.get(ArrayList.java:310)
at com.gigstudios.todolist.RecyclerListAdapter$3$1.onInput(RecyclerListAdapter.java:166)
at com.afollestad.materialdialogs.MaterialDialog.onClick(MaterialDialog.java:370)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:21163)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
这是崩溃的行,因为getAdapterPostion
返回-1:
taskList.getTasks().get(holder.getAdapterPosition()).setTitle(input.toString().trim());
我似乎找不到任何模式导致项目崩溃以及为什么其他项目没有崩溃。这里是的完整代码onBindViewHolder
。
@Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
//other code
//edit task
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new MaterialDialog.Builder(context)
.title(R.string.edit_task)
.inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES)
.inputRange(0, 300)
.positiveText(R.string.save)
.negativeText(R.string.cancel)
.input(context.getString(R.string.task_title), holder.textView.getText().toString(), new MaterialDialog.InputCallback() {
@Override
public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
//Edit Task
taskList.getTasks().get(holder.getAdapterPosition()).setTitle(input.toString().trim());
notifyItemChanged(holder.getAdapterPosition());
//save
save();
}
}).show();
}
});
}
为什么会这样呢?
解决它。我添加了onDropListener,并在其中只通知了recyclerview。然后,我使用实际正确的位置参数值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句