Позиционный источник данных не загружает все данные - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь поэкспериментировать с Позиционный источник данных .Я создал следующий фиктивный источник.

class ContactsDataSource : PositionalDataSource<Contact>() {
    override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<Contact>) {

        val c = ArrayList<Contact>()
        for (i in params.startPosition..params.loadSize) {
            c.add(Contact("$i contact"))
        }
        callback.onResult(c)

        Logger.d("loadRange: StartPos: ${params.startPosition} LoadSize: ${params.loadSize}")

    }

    override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<Contact>) {
        Logger.d("Load Initial: PageSize: ${params.pageSize} LoadSize: ${params.requestedLoadSize}")
        val c = ArrayList<Contact>()
        for (i in 0 until params.requestedLoadSize) {
            c.add(Contact("$i contact"))
        }

        callback.onResult(c, 0, 1000)
    }
}

class ContactsDsFactory : DataSource.Factory<Int, Contact>() {
    override fun create(): DataSource<Int, Contact> {
        return ContactsDataSource()
    }

}

Впервые он вызывает loadInitial и элементы загружаются.Когда я прокручиваю вверх, он загружает больше предметов, вызывая loadRange. После того, как диапазон загрузки вызывается впервые, он никогда не вызывается снова. Хотя загруженные элементы меньше, чем общее количество, которое я передал в обратном вызове loadInitial.Вот как я настроил источник.

val config = PagedList.Config.Builder().setEnablePlaceholders(false)
            .setMaxSize(120)
            .setInitialLoadSizeHint(60)
            .setPageSize(20).build()
        val list = LivePagedListBuilder<Int, Contact>(ContactsDsFactory(), config)
            .build()
        val recycler = findViewById<RecyclerView>(R.id.recycler)
        recycler.layoutManager = LinearLayoutManager(this)
        val adapter = ContactsRecycler()
        recycler.adapter = adapter
        list.observe(this, Observer {
            adapter.submitList(it)
        })

Это журнал

D/PagedLab: Load Initial: PageSize: 20 LoadSize: 60
D/PagedLab: loadRange: StartPos: 60 LoadSize: 20

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я создал класс MovieListDataSource, который расширяет PositionalDataSource. Дело в том, что вы должны использовать PagedListAdapter, и это будет вызывать loadAround(int). Если все работает хорошо, тогда не будет проблем с загрузкой. Нажмите здесь , и вы получите мою реализацию. Надеюсь, это поможет вам.

0 голосов
/ 30 января 2019

Я использовал неправильный диапазон for (i in params.startPosition..params.loadSize).Сработало после установки правильного диапазона params.startPosition + params.loadSize.

...