Начальный заполнитель с компонентами Paging Architecture - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Компоненты пейджинговой архитектуры в своем проекте для загрузки списка из сети (пока не используется база данных). Мой DataSource является PositionalDataSource подклассом, а мой PagedList.Config выглядит следующим образом:

PagedList.Config config = new PagedList.Config.Builder()
        .setPageSize(10)
        .setInitialLoadSizeHint(20)
        .setPrefetchDistance(20)
        .setEnablePlaceholders(true)
        .build();

Заполнители включены, и я обрабатываю нулевые ViewHolders в моем подклассе PagedListAdapter, чтобы по-разному отображать элементы заполнителей. Заполнители работают нормально при загрузке дополнительных элементов в конце списка, но я также хочу отобразить элемент-заполнитель до того, как будут загружены первые несколько элементов (как обычный индикатор загрузки).

Есть ли способ сделать это с библиотекой подкачки? Я попытался вызвать LoadInitialCallback.onResult() с позицией 1 вместо 0, но это только создает элемент-заполнитель перед первым реальным элементом, и этот элемент-заполнитель никогда не исчезает.

1 Ответ

0 голосов
/ 11 мая 2019

Есть метод, из которого вы должны передать размер набора данных, я думаю, что это то, чего вам не хватает.

public abstract static class LoadInitialCallback<Key, Value> {
        /**
         * Called to pass initial load state from a DataSource.
         * <p>
         * Call this method from your DataSource's {@code loadInitial} function to return data,
         * and inform how many placeholders should be shown before and after. If counting is cheap
         * to compute (for example, if a network load returns the information regardless), it's
         * recommended to pass data back through this method.
         * <p>
         * It is always valid to pass a different amount of data than what is requested. Pass an
         * empty list if there is no more data to load.
         *
         * @param data List of items loaded from the DataSource. If this is empty, the DataSource
         *             is treated as empty, and no further loads will occur.
         * @param position Position of the item at the front of the list. If there are {@code N}
         *                 items before the items in data that can be loaded from this DataSource,
         *                 pass {@code N}.
         * @param totalCount Total number of items that may be returned from this DataSource.
         *                   Includes the number in the initial {@code data} parameter
         *                   as well as any items that can be loaded in front or behind of
         *                   {@code data}.
         */
        public abstract void onResult(@NonNull List<Value> data, int position, int totalCount,
                @Nullable Key previousPageKey, @Nullable Key nextPageKey);

Я пытался это сделать, но я также не смог увидеть превью.

Чек http://youtube.com/watch?v=BE5bsyGGLf4

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...