Вот некоторые фрагменты кода, которые помогут вам выбрать правильный путь.Как видите, метод onDataChange
является частью attachValueEventListener
.
private List<Upload> uploads;
private ValueEventListener mValueEventListener;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
// In onCreate declare:
uploads = new ArrayList<>();
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
// 1. Implement attachValueEventListener, like this:
private void attachValueEventListener() {
if (mValueEventListener == null) {
mValueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
uploads.clear();
// iterate through values in database
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
uploads.add(upload);
}
// create mAdapter
mAdapter = new MyAdapter(getApplicationContext(), uploads);
// set mAdapter to recycler view
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// There was an Error
Log.d(TAG, "onCancelled: DatabaseError !!!");
Toast.makeText(getBaseContext(), "attachValueEventListener: Database Error!", Toast.LENGTH_LONG).show();
}
};
mDatabaseReference.addValueEventListener(mValueEventListener);
}
}
// 2. Implement detachValueEventListener:
private void detachValueEventListener() {
// detach the listener
if (mValueEventListener != null) {
mDatabaseReference.removeEventListener(mValueEventListener);
mValueEventListener = null;
}
}
// 3. Attach/Detach the ValueEventListener in onStart/onStop methods:
@Override
protected void onStart() {
super.onStart();
// add an event listener to fetch values from firebase database
attachValueEventListener();
}
@Override
protected void onStop() {
super.onStop();
// detach the event listener that fetches values from firebase database
detachValueEventListener();
}