簡體   English   中英

Recycler View Item Deletion index out of bound

[英]Recycler View Item Deletion index out of bound

我正在嘗試從存儲在數組中的回收站視圖中刪除該項目。

final int position 給了我這個建議(不要將位置視為固定;僅立即使用並調用 holder.getAdapterPosition() 稍后查找)。

我在下面寫的方法是在oncreate中,我們要刪除的項目由持有者持有,它調用deletetask()方法。

實際的錯誤是項目被刪除,沒有任何異常,然后當我嘗試刪除更多項目時,有時我會收到以下錯誤“java.lang.IndexOutOfBoundsException: Invalid index 0, size 0”

然后它把我推回到以前的活動,在再次進入回收站查看活動后,這些項目被無一例外地刪除。

為什么我會收到此錯誤“java.lang.IndexOutOfBoundsException: Invalid index 0, size 0”

FirebaseRecyclerOptions<model_tasks> options = new FirebaseRecyclerOptions.Builder<model_tasks>()
                .setQuery(reference, model_tasks.class)
                .build();

        FirebaseRecyclerAdapter<model_tasks, Viewholder> adapter = new FirebaseRecyclerAdapter<model_tasks, Viewholder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull Viewholder holder,final int position , @NonNull final model_tasks model) {

                holder.setTime(model.getTime());
                holder.setTask(model.getTask());
                holder.setDesc(model.getDesc());

                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                       key=  getRef(position).getKey();

                       // task_ = model.getTask();
                        //  description = model.getDesc();
                        //idd=model.getTime();
                        updateTask();
                    }
                });
            }

            @NonNull
            @Override
            public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.task_recieved, parent, false);
                return new Viewholder(view);
            }
        };

        recyclerView.setAdapter(adapter);
        adapter.startListening();
    }

刪除任務(方法)


            @Override
            public void onClick(View v) {

                reference.child(key).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()){
                        //    Toast.makeText(tasks.this, "Task Is deleted", Toast.LENGTH_SHORT).show();
                          //  cancelAlarm();
                        }else
                        {
                            String err = task.getException().toString();
                            Toast.makeText(tasks.this, "Failed to delete task "+ err, Toast.LENGTH_SHORT).show();
                        }

                    }

                });
                dialog.dismiss();
            }
        });

上述問題的答案不是使用鍵中的位置,而是使用下面的行,它消除了應用程序的崩潰。

key= getRef(holder.getAdapterPosition()).getKey();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM