2016-12-23 46 views
1

Hiy guys,Recyclerview没有更新新的数据

我有一个片段RecyclerView在里面。也就是说RecyclerView由火力地堡“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之后,因此有时回收站是空的。我不明白的是,回收商的观点并非总是空洞的事实。有时会显示数据,有时不显示。

谢谢

+0

你在添加任何数据回收视图 –

+0

嗨@ujjwalmainali,有或没有调用您的代码调用adapter.notifyDatasetChaged()'adapter.notifyDataSetChanged()'无所谓。重点在于回收者视图并非总是空的。所以我自己并不真正了解这个问题。 – DeKekem

回答

0

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

0

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

如果使用viewpager那么在片段

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

的方法,如果你在的FrameLayout

那么您可以在onViewCreated更新()infalting;

+0

Hi @Godwin。我没有使用viewpager – DeKekem

+0

所以你正在使用Framelayout来扩大片段 – Godwin

+0

Hi @Godwin,确切地说。 – DeKekem