Android 片段中的Recycler视图不显示任何数据,尽管PagingSource日志更正了数据

Android 片段中的Recycler视图不显示任何数据,尽管PagingSource日志更正了数据,android,kotlin,mvvm,Android,Kotlin,Mvvm,我试图在片段中的回收器视图中显示RESTful Api。当应用程序运行时,不会显示任何错误,但不会在“回收器”视图中加载任何内容。我在PagingSource文件中记录了响应,它显示了正确的数据,但在recycler视图中仍然没有显示任何内容 这是我的Api接口: interface Api { companion object { const val BASE_URL = "http://be7c232bf30e.ngrok.io" }

我试图在片段中的回收器视图中显示RESTful Api。当应用程序运行时,不会显示任何错误,但不会在“回收器”视图中加载任何内容。我在
PagingSource
文件中记录了响应,它显示了正确的数据,但在recycler视图中仍然没有显示任何内容

这是我的Api接口:

interface Api {

    companion object {
        const val BASE_URL = "http://be7c232bf30e.ngrok.io"
    }

    @GET("/posts")
    suspend fun searchPosts(
        @Query("_page") page: Int,
        @Query("_limit") perPage: Int
    ): List<SocialNetworkPost>
}
这是一个片段,其中recyclerView是:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val postAdapter = PostsAdapter(this)

    binding.apply {
        recyclerView.apply {
            setHasFixedSize(true)
            itemAnimator = null
            adapter = postAdapter.withLoadStateHeaderAndFooter(
                header = PostsLoadStateAdapter { postAdapter.retry() },
                footer = PostsLoadStateAdapter { postAdapter.retry() }
            )
            buttonRetry.setOnClickListener {
                postAdapter.retry()
            }
        }
    }

    viewModel.posts.observe(viewLifecycleOwner) {
        postAdapter.submitData(viewLifecycleOwner.lifecycle, it)
    }

    postAdapter.addLoadStateListener { loadState ->
        binding.apply {
            progressBar.isVisible = loadState.source.refresh is LoadState.Loading
            recyclerView.isVisible = loadState.source.refresh is LoadState.NotLoading
            buttonRetry.isVisible = loadState.source.refresh is LoadState.Error
            textViewError.isVisible = loadState.source.refresh is LoadState.Error

            // empty view
            if (loadState.source.refresh is LoadState.NotLoading && loadState.append.endOfPaginationReached && postAdapter.itemCount < 1) {
                recyclerView.isVisible = false
                textViewEmpty.isVisible = true
            } else {
                textViewEmpty.isVisible = false
            }
        }
    }
}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}

override fun onItemClick(post: SocialNetworkPost) {
    val action = HomeFragmentDirections.actionHomeFragmentToDetailsFragment(post)
    findNavController().navigate(action)
    }
}
这是我的适配器:

class PostsAdapter(private val listener: OnItemClickListener) : PagingDataAdapter<SocialNetworkPost, PostsAdapter.PostViewHolder>(POSTS_COMPARATOR) {

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

    override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
        val currentItem = getItem(position)

        if (currentItem != null) {
            Log.d("PostAdapter", "onBindViewHolder: if")
            holder.bind(currentItem)
        } else {
            Log.d("PostAdapter", "onBindViewHolder: else")
        }
    }

    inner class PostViewHolder(private val binding: ItemPostBinding) : RecyclerView.ViewHolder(binding.root) {
        init {
            binding.root.setOnClickListener {
                val position = bindingAdapterPosition
                if (position != RecyclerView.NO_POSITION) {
                    val item = getItem(position)
                    if (item != null) listener.onItemClick(item)
                }
            }
        }

        fun bind(post: SocialNetworkPost) {
            Log.d("PostAdapter", "bind: $post")
            binding.apply {
                Glide.with(itemView)
                    .load(post.accountIcon)
                    .centerCrop()
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .error(R.drawable.ic_account)
                    .into(imageViewProfilePicture)
                textViewName.text = post.accountName
                textViewDescription.text = post.description
                Glide.with(itemView)
                    .load(post.descriptionImage)
                    .centerCrop()
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .error(R.drawable.empty)
                    .into(imageViewDescription)
                textViewLikesAmount.text = "Likes: ${post.likesAmount}"
                textViewCommentsAmount.text = "Comments: ${post.commentsAmount}"

            }
        }
    }

    interface OnItemClickListener {
        fun onItemClick(post: SocialNetworkPost)
    }

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

            override fun areContentsTheSame(oldItem: SocialNetworkPost, newItem: SocialNetworkPost) = oldItem == newItem
        }
    }
}
class PostsAdapter(私有val侦听器:OnItemClickListener):PagingDataAdapter(POSTS\u COMPARATOR){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):PostViewHolder{
val binding=ItemPostBinding.inflate(LayoutInflater.from(parent.context),parent,false)
返回PostViewHolder(绑定)
}
覆盖BindViewHolder(holder:PostViewHolder,位置:Int){
val currentItem=getItem(位置)
如果(currentItem!=null){
Log.d(“PostAdapter”、“onBindViewHolder:if”)
持有者绑定(当前项)
}否则{
Log.d(“PostAdapter”、“onBindViewHolder:else”)
}
}
内部类PostViewHolder(私有val绑定:ItemPostBinding):RecyclerView.ViewHolder(binding.root){
初始化{
binding.root.setOnClickListener{
val位置=绑定适配器位置
如果(位置!=RecyclerView.无位置){
val item=getItem(位置)
if(item!=null)listener.onItemClick(item)
}
}
}
趣味绑定(帖子:SocialNetworkPost){
Log.d(“PostAdapter”、“bind:$post”)
应用{
使用(项目视图)滑动
.load(post.accountIcon)
.centerCrop()
.transition(DrawableTransitionOptions.withCrossFade())
.错误(R.可提取ic_账户)
.into(imageViewProfilePicture)
textViewName.text=post.accountName
textViewDescription.text=post.description
使用(项目视图)滑动
.load(后期描述图像)
.centerCrop()
.transition(DrawableTransitionOptions.withCrossFade())
.错误(R.drawable.empty)
.into(imageViewDescription)
textViewLikesAmount.text=“Likes:${post.likesAmount}”
textViewCommentsAmount.text=“注释:${post.commentsAmount}”
}
}
}
接口侦听器{
趣味网络点击(帖子:社交网络帖子)
}
伴星{
private val POSTS\u COMPARATOR=object:DiffUtil.ItemCallback(){
覆盖有趣的项目相同(旧项目:SocialNetworkPost,新项目:SocialNetworkPost)=oldItem.id==newItem.id
覆盖相同的内容(oldItem:SocialNetworkPost,newItem:SocialNetworkPost)=oldItem==newItem
}
}
}

RecyclerView需要一个layoutManager,您可以在xml中设置它:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
或按程序:

recyclerView.layoutManager = LinearLayoutManager(requireContext())

RecyclerView需要一个layoutManager,您可以在xml中设置它:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
或按程序:

recyclerView.layoutManager = LinearLayoutManager(requireContext())

您是否在XML中为RecyclerView设置了layouManager?我在代码里没看到我真不敢相信我错过了。我一整天都在想这个问题。你能写一个答案让我接受吗?你在XML中为RecyclerView设置了layouManager吗?我在代码里没看到我真不敢相信我错过了。我一整天都在想这个问题。你能写个答案让我接受吗?
recyclerView.layoutManager = LinearLayoutManager(requireContext())