Как дать 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;
}
Другие вопросы по тегам