Android notifyDataSetChanged()不适用于FirebaseRecyclerAdapter

Android notifyDataSetChanged()不适用于FirebaseRecyclerAdapter,android,firebase,firebase-realtime-database,android-recyclerview,firebaseui,Android,Firebase,Firebase Realtime Database,Android Recyclerview,Firebaseui,从FirebaseRecyclerAdapter中删除项目在我切换到MVP模式之前一直运行良好。现在适配器没有通知更改并抛出错误。我怎样才能解决这个问题 这是我的FirebaseRecyclerAdapter @Override public FirebaseRecyclerAdapter onEntryListChanged(Query query, FirebaseRecyclerOptions<EntryModel> options) { adapte

FirebaseRecyclerAdapter
中删除项目在我切换到MVP模式之前一直运行良好。现在适配器没有通知更改并抛出错误。我怎样才能解决这个问题

这是我的FirebaseRecyclerAdapter

@Override
    public FirebaseRecyclerAdapter onEntryListChanged(Query query, FirebaseRecyclerOptions<EntryModel> options) {

        adapter = new FirebaseRecyclerAdapter<EntryModel, EntryHolder>(options) {
            @NonNull
            @Override
            public EntryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.entry_item_view,parent,false);


                return new EntryHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull final EntryHolder holder, final int position, @NonNull EntryModel model) {
                entryView.attachView(model.getTitle(),model.getContent(),model.getDate(),holder);

                holder.entryUpdate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        updateFragment(adapter.getRef(position).getKey());
                    }
                });

                holder.entryDelete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("Entry").child(FirebaseAuth.getInstance().getUid());
                        mDatabase.child(adapter.getRef(position).getKey()).removeValue();
                        notifyDataSetChanged();

                    }
                });
                holder.expandArrow.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        boolean shouldExpand = holder.expandContent.getVisibility() == View.GONE;
                        ChangeBounds transition = new ChangeBounds();
                        transition.setDuration(200);

                        if(shouldExpand){
                            entryView.expandArror(holder);
                        }
                        else {
                            entryView.collapsArrow(holder);
                        }
                        entryView.startTransition(holder,transition,shouldExpand);



                    }
                });
            }
        };
        return adapter;
你越来越

 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
您正试图访问索引1,但数组大小为1,您需要访问0索引

尝试将位置值减少1,以便访问数组中的正确字段

mDatabase.child(adapter.getRef(position-1).getKey()).removeValue();

有几个简单的错误需要纠正:

  • 无论在何处使用
    位置
    ,请将其更改为
    holder.getAdapterPosition()
    。(为了更容易发现这些错误,请从
    位置
    参数中删除
    final
    修饰符。)
  • 删除
    notifyDataSetChanged()
    调用,这是为您完成的

从子节点获取值时,您似乎犯了错误

我有一个FirebaseRecyclerAdapter的示例实现


我也尝试过这个方法,它对我有效。

您是否在onStart()方法中实现了onStart侦听?是的,我可以正确地查看项目。我不能只删除它们,而是调用
mDatabase.child(adapter.getRef(position.getKey()).removeValue()
,您是否尝试过简单地调用:
adapter.getRef(position.removeValue()
mDatabase.child(adapter.getRef(position-1).getKey()).removeValue();