PositionalDataSource 从解析服务器数据库不返回任何内容

问题描述

我正在尝试使用 Products 数据源类型从 Parse Server 数据库加载 PositionalDataSource() 项,以便能够在向下滚动时获取项页。

这是我到目前为止所做的:

我的 PositionalDataSource() 类

class ParsePositionalDataSource: PositionalDataSource<Product>() {

    private fun getQuery() : ParseQuery<Product> {
        return ParseQuery.getQuery(Product::class.java).orderByDescending("createdAt")
    }

    override fun loadRange(params: LoadRangeParams,callback: LoadRangeCallback<Product>) {
        val query = getQuery()

        query.limit = params.loadSize
        query.skip = params.startPosition

        val products = query.find()

        callback.onResult(products)
    }

    override fun loadInitial(params: LoadInitialParams,callback: LoadInitialCallback<Product>) {
        val query = getQuery()

        query.limit = params.requestedLoadSize
        query.skip = params.requestedStartPosition

        val count = query.count()
        val products = query.find()

        callback.onResult(products,params.requestedStartPosition,count)
    }
}

然后是一个数据源工厂:

class ParseDataSourceFactory : DataSource.Factory<Int,Product>() {

    override fun create(): DataSource<Int,Product> {
        return ParsePositionalDataSource()
    }


}

最后是我的 ViewModal 类

class CategoryTabviewmodel() : viewmodel() {

    private var pagedListConfig: PagedList.Config = PagedList.Config.Builder().setEnablePlaceholders(true)
        .setPrefetchdistance(5)
        .setinitialLoadSizeHint(5)
        .setPageSize(5).build()

    private val sourceFactory = ParseDataSourceFactory()

    private val _productList =  LivePagedListBuilder(sourceFactory,pagedListConfig).build()

    val x = _productList

    //val productList: LiveData<PagedList<Product>> = _productList

    fun getProductList(): LiveData<PagedList<Product>> {
        return _productList
    }
}

我已经通过在以下位置设置断点来检查 loadinitial() 是否返回数据:val products = query.find() 并且是的,products 包含 Product 的列表

但在我的 ViewModal 中,_productList 始终为 null 或空列表。

我错过了什么吗?

解决方法

我在挖掘调试器控制台输出时自己找到了解决方案。

我看到一行写着:

E/RecyclerView: No layout manager attached; skipping layout

在我的 RecyclerView 中添加 layoutmanager 后它工作得很好

<androidx.recyclerview.widget.RecyclerView
        ...
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        ... />

文档说:

一个LayoutManager负责测量和定位item RecyclerView 中的视图以及确定何时执行的策略 回收用户不再可见的项目视图。经过 改变 LayoutManager 一个 RecyclerView 可以用来实现一个 标准垂直滚动列表,统一网格,交错网格, 水平滚动集合等等。几种股票布局 管理器供一般使用。

在编写 RecyclerView.LayoutManager 时,您几乎总是想要 使用布局位置,而在编写 RecyclerView.Adapter 时,您 可能想使用适配器位置。

看来 RecyclerView.Adapter 需要设置 RecyclerView.LayoutManager