我正在使用FirebaseAndroid-UI库附带的FirebaseRecyclerAdapter,我假设当Firebase上的数据发生变化时,它会自动刷新并更新RecyclerView。
我的代码很简单:
Firebase firebasePicturesRef = new Firebase(FIREBASE_URL);
mAdapter = new FirebaseRecyclerAdapter<Image, ImageViewHolder>(
Image.class, R.layout.pictures_grid_item,
ImageViewHolder.class, firebasePicturesRef) {
@Override
protected void populateViewHolder(ImageViewHolder viewHolder, Image model, int position) {
super.populateViewHolder(viewHolder, model, position);
Glide.with(getActivity()).load(model.getThumbnailUrl()).into(viewHolder.mImageView);
}
};
我还尝试在onDataChange方法中使用notifyDatasetChanged手动刷新适配器:
firebasePicturesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
我做错了什么吗?修复是什么?
我发现了问题,我在片段onStop()
中调用了mAdapter.cleanup();
。删除它解决了问题。
与其在onStop();
中进行清理,不如在onDestroy()
正如弗兰克所建议的:
通常,您应该在创建适配器的"相反"方法中调用cleanup()
。所以onCreate()
<-> onDestroy()
,onStart()
<-> onStop()
,onPause()
<-> onResume()