Android分页3.0加载方法不工作

Android分页3.0加载方法不工作,android,android-recyclerview,android-databinding,android-paging-3,Android,Android Recyclerview,Android Databinding,Android Paging 3,我正在尝试实现android paging 3.0库,但我发现.load方法不起作用,起初我认为适配器submitData或layoutManager不起作用,因为我确实收到了LoadResult.Page的响应,但现在进一步看,它根本不起作用 这是我的密码 1-片段 private fun initAdapter() { searchAdapter = SearchItemsAdapter { //item clicked } val gridLayou

我正在尝试实现android paging 3.0库,但我发现.load方法不起作用,起初我认为适配器submitData或layoutManager不起作用,因为我确实收到了LoadResult.Page的响应,但现在进一步看,它根本不起作用

这是我的密码

1-片段

private fun initAdapter() {
    searchAdapter = SearchItemsAdapter {
        //item clicked
    }
    val gridLayoutManager = GridLayoutManager(requireContext(), 2)
    binding?.layoutManager = gridLayoutManager
    binding?.searchAdapter = searchAdapter
}
private fun startSearch() {
    searchJob?.cancel()
    searchJob = viewLifecycleOwner.lifecycleScope.launch {
        searchViewModel?.getSearchResults("phone")?.collectLatest {
            searchAdapter?.submitData(it)
        }
    }
}
2-视图模型

fun getSearchResults(query: String): Flow<PagingData<ItemModel>> {
    val lastResult = currentSearchResult
    if (query == currentQueryValue && lastResult != null) {
        return lastResult
    }
    currentQueryValue = query
    val newResult: Flow<PagingData<ItemModel>> = searchRepository.getSearchResults(query)
        .cachedIn(viewModelScope)
    currentSearchResult = newResult
    return newResult
}
fun getSearchResults(查询:字符串):流{
val lastResult=currentSearchResult
if(query==currentQueryValue&&lastResult!=null){
返回最后结果
}
currentQueryValue=查询
val newResult:Flow=searchRepository.getSearchResults(查询)
.cachedIn(viewModelScope)
currentSearchResult=newResult
返回新结果
}
3-搜索存储库

fun getSearchResults(query: String): Flow<PagingData<ItemModel>> {
    return Pager(
        config = PagingConfig(
            pageSize = 10
        ),
        pagingSourceFactory = { SearchPagingSource(client, query) }
    ).flow
}
fun getSearchResults(查询:字符串):流{
传呼机(
config=PagingConfig(
页面大小=10
),
pagingSourceFactory={SearchPagingSource(客户端,查询)}
).流动
}
4-分页源

override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ItemModel> {
    val position: Int = params.key ?: 1
    return try {
        val response: SearchResponse = service.getSearchResult(query, position)
        val items = response.metadata.results
        val nextKey = if (items.isEmpty()) {
            null
        } else {
            position + 1
        }
        LoadResult.Page(
            data = items,
            prevKey = if (position == 1) null else position - 1,
            nextKey = nextKey
        )
    } catch (exception: IOException) {
        return LoadResult.Error(exception)
    } catch (exception: HttpException) {
        return LoadResult.Error(exception)
    }
}
覆盖挂起乐趣加载(参数:LoadParams):LoadResult{
val位置:Int=params.key?:1
回击{
val响应:SearchResponse=service.getSearchResult(查询,位置)
val items=response.metadata.results
val nextKey=if(items.isEmpty()){
无效的
}否则{
位置+1
}
LoadResult.Page(
数据=项目,
prevKey=if(position==1)null else位置-1,
nextKey=nextKey
)
}捕获(异常:IOException){
返回LoadResult.Error(异常)
}捕获(异常:HttpException){
返回LoadResult.Error(异常)
}
}
5-适配器

override fun onBindViewHolder(holder: SearchItemsViewHolder, position: Int) {
    val item = getItem(position)
    if (item != null) {
        holder.binding.item = item
        holder.itemView.setOnClickListener {
            itemClickCallback(item)
        }
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchItemsViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)
    val binding = SearchItemLayoutBinding.inflate(layoutInflater, parent, false)
    return SearchItemsViewHolder(binding)
}

companion object {
    private val diffCallBack = object : DiffUtil.ItemCallback<ItemModel>() {
        override fun areItemsTheSame(oldItem: ItemModel, newItem: ItemModel): Boolean =
            oldItem.id == newItem.id

        override fun areContentsTheSame(oldItem: ItemModel, newItem: ItemModel): Boolean =
            oldItem == newItem
    }
}
覆盖BindViewHolder(holder:SearchItemsViewHolder,位置:Int){
val item=getItem(位置)
如果(项!=null){
holder.binding.item=项目
holder.itemView.setOnClickListener{
itemClickCallback(项目)
}
}
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):SearchItemsViewHolder{
val layoutInflater=layoutInflater.from(parent.context)
val binding=SearchItemLayoutBinding.inflate(LayoutFlater,parent,false)
返回SearchItemsViewHolder(绑定)
}
伴星{
private val diffCallBack=对象:DiffUtil.ItemCallback(){
覆盖项相同(旧项:项模型,新项:项模型):布尔值=
oldItem.id==newItem.id
覆盖内容相同(旧项:ItemModel,新项:ItemModel):布尔值=
oldItem==newItem
}
}

我发现了我遇到的问题

1-我没有从片段的onViewCreated方法调用startSearch方法,这对API调用没有帮助

2-XML中的recyclerView具有wrap_内容,而不是0dp作为高度