Библиотека подкачки, сброс PageKeyedDataSource - PullRequest
0 голосов
/ 27 сентября 2019

Я реализовал бесконечную прокрутку для своего списка, используя библиотеку Android Paging.Я загружаю данные из API порциями в зависимости от страниц.Мое приложение позволяет пользователю фильтровать элементы, добавляя некоторые параметры в запрос API.После включения фильтрации я хотел бы изменить поле parameters на экземпляр PageKeyedDataSource и сбросить загрузчик (я хочу установить страницу на 1 и вызвать в ней метод loadInitial)

DataSource(private var initialData: List<Data>, var parameters: HashMap<String, String>) : PageKeyedDataSource<Int, Data>() {


    override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Data>) {
        callback.onResult(initialData, null, 2)
    }

    override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {

        val page = params.key
        parameters[PAGE] = page.toString()
        val request = ApiRequest()

        request.setOnDataObtainListener {
            callback.onResult(it,page.inc())
        }

        request.getData(parameters)
    }

    override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {

    }

    fun reset(initialData: List<Data>, parameters: HashMap<String, String>) {
        this.parameters = parameters
        this.initialData = initialData
        invalidate()
    }

}

мой класс модели представления

ViewModelData : ViewModel() {

    private var dataList: LiveData<PagedList<Data>>? = null
    private var dataSourceFactory: DataSourceFactory? = null

    fun loadData(initialData: List<Data>, parameters: HashMap<String, String>): LiveData<PagedList<Data>> {

        if (newsDataList == null) {
            dataSourceFactory = DataSourceFactory(initialData, parameters)

            val config = PagedList.Config.Builder()
                    .setPageSize(10)
                    .setInitialLoadSizeHint(10)
                    .setEnablePlaceholders(false)
                    .build()

            if (dataSourceFactory != null) {
                dataList = LivePagedListBuilder<Int, Data>(dataSourceFactory!!, config)
                        .setInitialLoadKey(1)
                        .build()
            }
        }

        return dataList as LiveData<PagedList<Data>>
    }

    fun reset(initialData: List<Data>,parameters: HashMap<String, String>) {
        dataSourceFactory?.dataSourceLiveData?.value?.reset(initialData,parameters)
    }}

Думаю, invalidate будет работать, но я не могу удалить PagedList из адаптера.

...