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

Android Studio Kotlin Fragment RecyclerView适配器未绑定问题求助

解决Fragment中RecyclerView报错:No adapter attached; skipping layout

核心问题

你的VSFragment中,onCreateView方法里先尝试获取RecyclerView,但此时布局还未被加载(view为空),导致后续的layoutManager、adapter配置代码完全没执行,RecyclerView处于未初始化状态,因此触发报错。

修改后的Fragment代码

package com.example.pgm

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

class VSFragment : Fragment() {
    private var param1: String? = null
    private var param2: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // 先加载布局,得到根View
        val rootView = inflater.inflate(R.layout.fragment_v_s, container, false)
        
        // 从根View中获取RecyclerView
        val rv = rootView.findViewById<RecyclerView>(R.id.activeSubsRecycler)

        // 初始化数据
        val subscription = ArrayList<SubscriptionData>().apply {
            add(SubscriptionData("ghassan","1000","2002/1/1","2002/1/3"))
            add(SubscriptionData("ameer","2000","2002/1/1","2002/1/3"))
            add(SubscriptionData("ahmad","9893", "2002/1/1","2002/1/3"))
            add(SubscriptionData("saif","42452", "2002/1/1","2002/1/3"))
            add(SubscriptionData("ghassan","453", "2002/1/1","2002/1/3"))
            add(SubscriptionData("ameer","3354", "2002/1/1","2002/1/3"))
            add(SubscriptionData("ghassan","1000","2002/1/1","2002/1/3"))
            add(SubscriptionData("ameer","2000","2002/1/1","2002/1/3"))
            add(SubscriptionData("ahmad","9893", "2002/1/1","2002/1/3"))
            add(SubscriptionData("saif","42452", "2002/1/1","2002/1/3"))
            add(SubscriptionData("ghassan","453", "2002/1/1","2002/1/3"))
            add(SubscriptionData("ameer","3354", "2002/1/1","2002/1/3"))
        }

        // 配置RecyclerView
        rv.setHasFixedSize(true)
        rv.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
        rv.adapter = SubscriptionAdapter(requireContext(), subscription)

        return rootView
    }

    companion object {
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            VSFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}

额外优化建议

  • 使用requireContext()替代activity或context,它会确保上下文不为空,避免空指针风险,同时代码更简洁。
  • 数据初始化使用apply函数,让代码更紧凑易读。
  • 移除冗余的空判断,因为从已加载的rootView中获取的RecyclerView不可能为null(只要XML布局中id正确)。
  • 确保SubscriptionData类已正确定义,包含name、value、startDate、endDate这几个属性。

内容的提问来源于stack exchange,提问作者f.n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:15:12