从 FirebaseRecyclerAdapter 中删除项目后,Android 应用程序崩溃

2hTu2

我在 populateViewHolder 中创建了一个删除函数,如下所示:

viewHolder.mView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        new AlertDialog.Builder(getContext())
                .setTitle("Are you sure?")
                .setMessage("Do you want to delete this note?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        mNotesDatabase.child(list_id).removeValue();
                        notifyDataSetChanged();
                        notifyItemRemoved(position);
                    }
                })
                .setNegativeButton("No", null)
                .show();

        return true;
    }
});

此代码存在于:public void onDataChange(DataSnapshot dataSnapshot).当我运行我的代码并尝试从列表中删除该项目时,我的应用程序崩溃。但是,它确实删除了数据库本身中的项目。我认为我的应用程序没有FirebaseRecycleAdapter正确更新我尝试使用notifydatasetchanged(),结果一无所获。我也尝试覆盖onChildRemoved. 但是 onChildRemoved 似乎不是内部的函数FirebaseRecycleAdapter我还尝试调用它FirebaseRecycleAdapter本身,它告诉我它没有初始化。

这是 logCat:

在此处输入图片说明

编辑

在此文本下方,您可以根据要求找到整个适配器的代码:

        final FirebaseRecyclerAdapter<Notes, NotesViewHolder> notesRecyclerViewAdapter = new FirebaseRecyclerAdapter<Notes, NotesViewHolder>(
            Notes.class,
            R.layout.feed_note_single_layout,
            NotesViewHolder.class,
            mNotesDatabase
    ) {

        @Override
        protected void populateViewHolder(final NotesViewHolder viewHolder, Notes model, final int position) {

            final String list_id = getRef(position).getKey();

            mNotesDatabase.child(list_id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    final String title = dataSnapshot.child("title").getValue().toString();
                    final String message = dataSnapshot.child("message").getValue().toString();

                    viewHolder.setTitle(title);
                    viewHolder.setMessage(message);

                    viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent noteIntent = new Intent(getContext(), NotesActivity.class);
                            noteIntent.putExtra("list_id", list_id);
                            noteIntent.putExtra("title", title);
                            noteIntent.putExtra("message", message);
                            startActivity(noteIntent);

                        }
                    });

                    viewHolder.mView.setOnLongClickListener(new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            new AlertDialog.Builder(getContext())
                                    .setTitle("Are you sure?")
                                    .setMessage("Do you want to delete this note?")
                                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {



                                            mNotesDatabase.child(list_id).removeValue();
                                            notifyItemRemoved(viewHolder.getAdapterPosition());
                                            notifyDataSetChanged();


                                        }
                                    })
                                    .setNegativeButton("No", null)
                                    .show();

                            return true;
                        }
                    });

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    };

    mFeedList.setAdapter(notesRecyclerViewAdapter);
布尼亚吉皮塔克

我认为可能会出现问题,因为当您删除数据RecyclerView并调用notifyDataSetChanged(). positionpopulateViewHolder可能是指删除position

因此,您应该使用viewHolder.getAdapterPosition()代替position.

根据日志,该问题也可能是由onDataChangein引起的NoteActivity请仔细检查。

希望,有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章