2016-12-23 17 views
1

Hiy ребята,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, так что время от времени повторитель пуст. То, что я не могу понять, это тот факт, что просмотр ресайклеров не всегда пуст. Иногда данные отображаются, а иногда нет.

Thanks

+0

Вы вызвали адаптер.notifyDatasetChaged() на свой код при добавлении каких-либо данных на просмотр recycler. –

+0

Привет @ujjwalmainali с вызовом 'adapter.notifyDataSetChanged()' или без него не имеет значения. Дело в том, что просмотр ресайклеров не всегда пуст. Поэтому я сам не понимаю эту проблему. – DeKekem

ответ

0

Я думаю, что если вы используете FirebaseRecyclerAdapter (или любой класс, расширенный от этого) в качестве вашего адаптера RecyclerView, вы должны установить recyclerView.setHasFixedSize(false). Таким образом, recyclerView знал, что данные постоянно обновляются.

0

На самом деле onResume(); строго связан с активностью на Resume();

Если вы используете ViewPager, то есть метод в фрагменте

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

если вы infalting в framelayout

, то вы можете обновить в onViewCreated();

+0

Hi @Godwin. Я не использую viewpager – DeKekem

+0

, поэтому вы используете Framelayout для раздувания фрагмента – Godwin

+0

Привет @Godwin, точно. – DeKekem