2016-12-23 48 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