【发布时间】:2018-07-01 21:49:25
【问题描述】:
从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;
问题在于删除。
日志文件,
07-02 00:38:47.678 29773-29773/com.example.nejat.journalapptrail1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nejat.journalapptrail1, PID: 29773
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.get(ArrayList.java:411)
at com.firebase.ui.common.BaseObservableSnapshotArray.getSnapshot(BaseObservableSnapshotArray.java:70)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:112)
at com.example.nejat.journalapptrail1.EntryList.EntryListPresenter$1$2.onClick(EntryListPresenter.java:72)
at android.view.View.performClick(View.java:6261)
at android.view.View$PerformClick.run(View.java:23752)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
【问题讨论】:
-
您是否在 onStart() 方法中实现了 onStartListening?
-
是的,我可以正常查看这些项目。我不能只删除它们。
-
不调用
mDatabase.child(adapter.getRef(position).getKey()).removeValue();,您是否尝试过简单地调用:adapter.getRef(position).removeValue()?
标签: android firebase firebase-realtime-database android-recyclerview firebaseui