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