2016-01-27 7 views
2

Я использую FirebaseRecyclerAdapter, который поставляется с библиотекой FirebaseAndroid-UI, и я предполагаю, что когда данные будут изменены на Firebase, он автоматически обновит и обновит RecyclerView.FirebaseRecyclerAdapter автоматически обновляет данные

Мой код прост:

Firebase firebasePicturesRef = new Firebase(FIREBASE_URL); 

mAdapter = new FirebaseRecyclerAdapter<Image, ImageViewHolder>(
     Image.class, R.layout.pictures_grid_item, 
     ImageViewHolder.class, firebasePicturesRef) { 

    @Override 
    protected void populateViewHolder(ImageViewHolder viewHolder, Image model, int position) { 
     super.populateViewHolder(viewHolder, model, position); 
     Glide.with(getActivity()).load(model.getThumbnailUrl()).into(viewHolder.mImageView); 
    } 
}; 

Я также попытался вручную обновить адаптер с помощью notifyDatasetChanged в методе OnDataChange:

firebasePicturesRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (mAdapter != null) 
      mAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 

я делаю что-то не так? Что такое исправление?

+0

Вы можете поставить точку останова в 'populateViewHolder()' и увидеть, что если сработал? –

+2

Нашли ошибку. Я вызывал 'mAdapter.cleanup();' in onStop of Fragment. Удалите, что он работает нормально. Я думаю, что я должен сделать очистку в методе 'onDestroy'? –

+2

Хорошо, что вы вызываете 'cleanup()'! В общем случае вы должны вызывать 'cleanup()' в методе «напротив», из которого вы создаете адаптер. Поэтому 'onCreate()' <-> 'onDestroy()', 'onStart()' <-> 'onStop()', 'onPause()' <-> 'onResume()'. –

ответ

4

Я нашел проблему, я звонил mAdapter.cleanup(); в onStop() фрагмента. Исправлена ​​проблема.

Вместо того чтобы делать уборку в onStop(); он должен быть вызван в onDestroy()

Как полагает Франк:

В общем, вы должны вызвать cleanup() в методе «обратном», откуда вы создаете адаптер. Так onCreate() < ->onDestroy(), onStart() < ->onStop(), onPause() < ->onResume()

+0

Точно это идеальное решение должно быть принято. – Subho

Смежные вопросы