ItemkeyedDataSource.LoadInitialCallback onResult () ничего не сделал - PullRequest
0 голосов
/ 14 июля 2020

Проблема : Наблюдатель на LiveData<PagedList> не запускается после вызова ItemKeyedDataSource.LoadedInitialCallback.onResult().

В момент callback.onResult(...) переданное значение является правильным. Однако после этого ничего не происходит.

Ожидается : После callback.onResult(...) наблюдатель должен быть в состоянии обнаружить изменение в LiveData.

Релевантно Код : метод для получения данных из сети (он находится в классе под названием CommentManager), здесь мы использовали Firestore:

...
public void loadInitialComments(int pageSize,
                                ItemKeyedDataSource.LoadInitialCallback<Comment> callback) {
    collectionReference.orderBy(DatabaseConstants.FIELD_TIMESTAMP)
        .limit(pageSize)
        .get()
        .addOnSuccessListener(queryDocumentSnapshots -> {
            callback.onResult(getComments(queryDocumentSnapshots));
        });
}
...

Как функция вызывается в классе DataSource

...
@Override
public void loadInitial(LoadInitialParams<String> params,
                        LoadInitialCallback<Comment> callback) {
    commentManager.loadInitialComments(params.requestedLoadSize, callback);
}
...

Класс ViewModel

public final class CommentViewModel extends ViewModel {
    private final LiveData<PagedList<Comment>> comments;

    public CommentViewModel() {
        comments = new LivePagedListBuilder<>(new CommentDataSourceFactory(new CommentManager()), config).build();
    }

    public LiveData<PagedList<Comment>> getComments() {
        return comments;
    }

Как ViewModel вызывается в основном действии

...
CommentViewModel commentViewModel = new ViewModelProvider(this,
    new CommentViewModelFactory())
    .get(CommentViewModel.class);
commentViewModel.getComments().observe(this, comments -> commentListAdapter.submitList(comments));
...
...