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
相关产品推荐
相关产品推荐

