Recyclerview未使用新数据

时间:2016-12-23 10:16:44

标签: android firebase firebase-realtime-database fragment firebaseui

他们,

我有一个片段RecyclerViewRecyclerView由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。问题是onDataChangeonResume之后发生,因此有时回收者是空的。我无法理解的事实是,回收者视图并不总是空的。有时显示数据,有时不显示。

由于

2 个答案:

答案 0 :(得分:0)

实际上是onResume();与活动onResume();

严格绑定

如果您使用的是viewpager,则片段

中有一个方法
 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    //do your logic . updating recycler view
}

如果你在framelayout

中有效

然后你可以在onViewCreated();

中更新

答案 1 :(得分:0)

我认为如果您使用FirebaseRecyclerAdapter(或任何扩展的类)作为RecyclerView适配器,则应设置recyclerView.setHasFixedSize(false)。因此recyclerView知道数据会不断更新。