You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView提示No adapter attached; skipping layout问题求助(附代码)

解决RecyclerView提示“No adapter attached; skipping layout”问题

这个错误的核心原因是:RecyclerView完成第一次布局时,还没有被设置Adapter。因为Firebase加载数据是异步操作,onProductsLoadSuccess会在数据加载完成后才执行,此时RecyclerView已经完成了初始布局流程,所以会抛出这个警告。

修复步骤:

  1. 提前初始化空Adapter并绑定到RecyclerView
    在Activity的初始化方法中,先创建一个空数据的Adapter并设置给RecyclerView,确保布局时Adapter已存在:

    private lateinit var productsAdapter: ProductsAdapter
    
    private fun init() {
        productsLoadListener = this
        val gridLayoutManager = GridLayoutManager(this,1)
        rv_produk.layoutManager = gridLayoutManager
        // 提前绑定空适配器
        productsAdapter = ProductsAdapter(this, emptyList())
        rv_produk.adapter = productsAdapter
        rv_produk.addItemDecoration(SpaceItemDecoration())
    }
    
  2. 给Adapter添加数据更新方法
    修改Adapter,允许动态更新数据源并通知RecyclerView刷新:

    class ProductsAdapter(
        private val context: Context,
        private var list: List<Products> // 将val改为var,支持修改
    ): RecyclerView.Adapter<ProductsAdapter.ProductsViewHolder>() {
    
        // 添加数据更新方法
        fun updateList(newList: List<Products>) {
            list = newList
            notifyDataSetChanged()
        }
    
        // 其余代码保持不变...
    }
    
  3. 数据加载完成后更新Adapter数据
    在onProductsLoadSuccess中,不再重新创建Adapter,而是调用更新方法:

    override fun onProductsLoadSuccess(productsModelList: List<Products>?) {
        productsModelList?.let {
            productsAdapter.updateList(it)
        }
    }
    

额外优化建议:

避免使用!!强制非空断言,改用安全调用或空判断,减少空指针风险:

override fun onBindViewHolder(holder: ProductsViewHolder, position: Int) {
    val product = list[position]
    Glide.with(context)
        .load(product.image)
        .into(holder.gambarProduk ?: return)
    holder.namaProduk?.text = product.name
    holder.hargaProduk?.text = "Rp${product.price}"
}

内容的提问来源于stack exchange,提问作者haainips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:40:28