Я настроил Google Paging Library, следуя этому руководству: https://guides.codepath.com/android/Paging-Library-Guide
Данные извлекаются из таблицы sqlite с использованием Room.
Когда новые данные добавляются в таблицу sqlite,Наблюдатель не вызывается.Таким образом, мой просмотрщик не отображает его.Это ошибка в LivePagedListBuilder?
PagedList.Config config = new PagedList.Config.Builder().setEnablePlaceholders(true).setPageSize(4).build();
MessageDataSourceFactory factory = new MessageDataSourceFactory(this);
this.messageListLiveData = new LivePagedListBuilder(factory, config).build();
this.messageListLiveData.observe(this, new Observer<PagedList<MessageEntity>>() {
@Override
public void onChanged(@Nullable PagedList<MessageEntity> messageEntities) {
adapter.submitList(messageEntities);
}
});
DataSourceFactory
public class MessageDataSourceFactory extends DataSource.Factory<Long, MessageEntity> {
Context context;
public MessageDataSourceFactory(Context context) {
this.context = context;
}
@Override
public DataSource<Long, MessageEntity> create() {
MessageDataSource dataSource = new MessageDataSource(context);
return dataSource;
}
}
DataSource
public class MessageDataSource extends ItemKeyedDataSource<Long, MessageData> {
Context context;
public MessageDataSource(Context context) {
this.context = context;
}
@NonNull
@Override
public Long getKey(@NonNull MessageData item) {
return item.getIndex();
}
public void loadInitial(@NonNull LoadInitialParams<Long> params, @NonNull final LoadInitialCallback<MessageData> callback) {
// DAO loads initial data
callback.onResult(messages);
}
// Called repeatedly when more data needs to be set
@Override
public void loadAfter(@NonNull LoadParams<Long> params, @NonNull LoadCallback<MessageData> callback) {
if(params.key == 0) {
return;
}
// DAO loads more data
callback.onResult(messages);
}
@Override
public void loadBefore(@NonNull LoadParams<Long> params, @NonNull LoadCallback<MessageData> callback) {
}
}
Альтернативой является создание запроса, который возвращает
DataSource.Factory<Integer, MessageEntity>
Но я бы хотел иметь свой собственный класс DataSource.