FirebaseUI 3.0.0:在新版本的 `FirebaseRecyclerAdapter` 中覆盖 `onDataChange` 方法
FirebaseUI 3.0.0: Override `onDataChange` method in new version of `FirebaseRecyclerAdapter`
根据 Firebase UI 3.0.0
在 FirebaseRecyclerAdapter
中,我们必须覆盖 onDataChange
方法,但我如何检索其中的数据?
@Override
public void onDataChanged() {
super.onDataChanged();
}
Can anyone explain what I need to do? Call valueEventListener or what?
这里有一些代码片段,应该会让您走上正确的道路。
如您所见,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();
}
根据 Firebase UI 3.0.0
在 FirebaseRecyclerAdapter
中,我们必须覆盖 onDataChange
方法,但我如何检索其中的数据?
@Override
public void onDataChanged() {
super.onDataChanged();
}
Can anyone explain what I need to do? Call valueEventListener or what?
这里有一些代码片段,应该会让您走上正确的道路。
如您所见,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();
}