Ваш список уже передан адаптеру, все, что вам нужно сделать, это уведомить адаптер, что что-то изменилось в вашей базе данных. Также не меняйте ссылку на него в обратном вызове (назначьте другой список переменной list
), просто вызовите .addAll (). Таким образом, ваш адаптер уже знает о вашем списке, его просто нужно будет уведомить.
list = sentinelStorage.readSentinelsListFromDB(dbRef, new FirebaseCallback() {
@Override
public void onCallback(List<Sentinel> lst) {
list.addAll(lst);
adapter.notifyDatasetChanged();
Log.d(TAG, "onCallback.Is list empty "+list.isEmpty());// not EMPTY
}
});
Более того, вам не нужно заставлять readSentinelsListFromDB возвращать List, поскольку он уже возвращен в обратном вызове. так что я бы тоже это убрал.
Итак, назовите ваш метод так:
sentinelStorage.readSentinelsListFromDB(dbRef, new FirebaseCallback() {
@Override
public void onCallback(List<Sentinel> lst) {
list.addAll(lst);
adapter.notifyDatasetChanged();
Log.d(TAG, "onCallback.Is list empty "+list.isEmpty());// not EMPTY
}
});
Еще одна вещь, которую вы можете сделать, чтобы сделать свой код чище, это заставить вашу деятельность реализовать этот интерфейс:
public class ActivitySentinel extends BaseActivity implements FirebaseCallback
Это заставит вас создать метод в вашей деятельности, где вы будете получать обратные вызовы:
@Override
public void onCallback(List<Sentinel> lst) {
list.addAll(lst);
adapter.notifyDatasetChanged();
Log.d(TAG, "onCallback.Is list empty "+list.isEmpty());// not EMPTY
}
Таким образом, ваш вызов метода изменится на:
sentinelStorage.readSentinelsListFromDB(dbRef,this);