【问题标题】:Recyclerview is not updated with new DataRecyclerview 未使用新数据更新
【发布时间】:2016-12-23 10:16:43
【问题描述】:

大家好,

我有一个带有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 之后,因此有时回收器是空的。我无法理解的是回收站视图并不总是空的。有时显示数据,有时不显示。

谢谢

【问题讨论】:

  • 在将任何数据添加到回收站视图时,您是否在代码上调用了 adapter.notifyDatasetChaged()
  • 嗨@ujjwalmainali,无论是否致电adapter.notifyDataSetChanged()都没有关系。关键是回收站视图并不总是空的。所以我自己并不真正理解这个问题。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    其实 onResume();与活动 onResume() 严格绑定;

    如果您使用的是 viewpager,那么片段中有一个方法

     @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        //do your logic . updating recycler view
    }
    

    如果你在框架布局中出错

    然后你可以在 onViewCreated() 中更新;

    【讨论】:

    • 嗨@Godwin。我没有使用 viewpager
    • 所以你正在使用 Framelayout 来膨胀片段
    • 嗨@Godwin,完全正确。
    • 然后将更新代码从 onresume 移动到 onviewCreated 并测试 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多