Как дать RecyclerView Adapter новые данные из AsyncTaskLoader
Мой AsyncTaskLoader загружает данные с удаленного сервера. Когда поступают новые данные, естественно, делается звонок onLoadFinished
, На данный момент я не знаю, как передать новые данные RecyclerView.Adapter
, призвание notifyDataSetChanged
не дает ему новые данные: он просто сообщает, что есть новые данные. Итак, какой-нибудь совет, как я могу это сделать? Сейчас самое лучшее, что я могу придумать, - это создать свой собственный. setData
метод в моей реализации RecyclerView.Adapter
как
public void setData(List<MyObject> data){
if(null != data && !data.isEmpty()){
synchronized(mItems){
mItems.clear();
mItems.addAll(data);
}
notifyDataSetChanged();
}
}
Моя идея самая лучшая? Или есть более разумный способ сделать это?
3 ответа
Предоставьте публичный метод в вашем адаптере для обновления данных.
Например, вы могли бы выразиться так
public void updateItems(ArrayList<MyObject> myObjects) {
this.data = myObjects;
notifyDataSetChanged();
}
У вас есть два варианта: 1. Создайте новый адаптер с новыми данными и перезагрузите адаптер. 2. То, как вы это делаете.
Я не могу думать ни о каких других методах.
Хорошо, у меня была та же проблема, и вот решение, которое я сделал. Сначала я передал объект списка из onLoadFinished и в RecyclerViewAdapter я создал имя метода setCardInfoList() и там я передал этот объект глобальному объекту List, который я определяю в классе адаптера.
В методе onLoadFinished..
@Override
public void onLoadFinished(android.content.Loader<List<Earthquake>> loader, List<Earthquake> earthquakes) {
if (earthquakes != null && !earthquakes.isEmpty()) {
adapter.setCardInfoList(earthquakes);
adapter.notifyDataSetChanged();
}else {
emptyView.setText("No Earthquake Found...");
}
}
Класс внутреннего адаптера
public void setCardInfoList(List<Earthquake> earthquakes){
this.earthquakeList = earthquakes;
}