Recyclerview 未更新新数据
Recyclerview is not updated with new Data
大家好,
我有一个片段,里面有 RecyclerView
。 RecyclerView
由 Firebase 'DatabaseReference' 对象填充,在该引用上我添加了一个 ValueListener,如下所示:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
Log.d(TAG, "onCreateView");
View view = inflater.inflate(R.layout.fragment_home, container, false);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Do something
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
ItemRecyclerViewAdapter adapter = new ItemRecyclerViewAdapter(activity, itemsDatabaseReference);
adapter.setHasStableIds(true);
// use a linear layout manager
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
DividerItemDecoration itemDecoration = new DividerItemDecoration(getContext(),
DividerItemDecoration.VERTICAL_LIST);
recyclerView.addItemDecoration(itemDecoration);
recyclerView.setAdapter(adapter);
return view;
}
ItemRecyclerViewAdapter
扩展 FirebaseRecyclerAdapter
。问题是 onDataChange
发生在 onResume
之后,因此回收站有时是空的。我无法理解的是回收者视图并不总是空的。有时显示数据,有时不显示。
谢谢
实际上是 onResume();与 activity onResume();
严格绑定
如果您使用的是 viewpager,那么片段中有一个方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//do your logic . updating recycler view
}
如果你在 framelayout 中使用
然后您可以在 onViewCreated() 中更新;
我认为如果您使用 FirebaseRecyclerAdapter
(或从其扩展的任何 class)作为您的 RecyclerView
适配器,您应该设置 recyclerView.setHasFixedSize(false)
。所以recyclerView
知道数据是不断更新的。
大家好,
我有一个片段,里面有 RecyclerView
。 RecyclerView
由 Firebase 'DatabaseReference' 对象填充,在该引用上我添加了一个 ValueListener,如下所示:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
Log.d(TAG, "onCreateView");
View view = inflater.inflate(R.layout.fragment_home, container, false);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Do something
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
ItemRecyclerViewAdapter adapter = new ItemRecyclerViewAdapter(activity, itemsDatabaseReference);
adapter.setHasStableIds(true);
// use a linear layout manager
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
DividerItemDecoration itemDecoration = new DividerItemDecoration(getContext(),
DividerItemDecoration.VERTICAL_LIST);
recyclerView.addItemDecoration(itemDecoration);
recyclerView.setAdapter(adapter);
return view;
}
ItemRecyclerViewAdapter
扩展 FirebaseRecyclerAdapter
。问题是 onDataChange
发生在 onResume
之后,因此回收站有时是空的。我无法理解的是回收者视图并不总是空的。有时显示数据,有时不显示。
谢谢
实际上是 onResume();与 activity onResume();
严格绑定如果您使用的是 viewpager,那么片段中有一个方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//do your logic . updating recycler view
}
如果你在 framelayout 中使用
然后您可以在 onViewCreated() 中更新;
我认为如果您使用 FirebaseRecyclerAdapter
(或从其扩展的任何 class)作为您的 RecyclerView
适配器,您应该设置 recyclerView.setHasFixedSize(false)
。所以recyclerView
知道数据是不断更新的。