Fragment中RecyclerView报No adapter attached错误且未显示的解决求助
解决RecyclerView报错
No adapter attached; skipping layout及不显示问题 核心问题分析
你的代码存在两个关键问题导致报错和RecyclerView无法显示:
- 代码执行顺序错误:
onCreateView中return view语句写在RecyclerView初始化代码之前,导致设置布局管理器、绑定适配器的代码完全不会执行,RecyclerView无任何配置,触发No adapter attached报错。 - View Binding未初始化:声明了
binding变量但未通过View Binding方式初始化布局,直接使用binding.recyclerView会引发空指针异常(当前因return提前执行,未触发该错误)。
修复步骤及代码修改
修改HomeFragment的onCreateView方法,调整代码顺序并正确使用View Binding:
class HomeFragment : Fragment() { private lateinit var auth : FirebaseAuth private lateinit var db : FirebaseFirestore private lateinit var binding: FragmentHomeBinding val postArrayList : ArrayList<Post> = ArrayList() var adapter : FeedRecyclerAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // 1. 正确初始化View Binding binding = FragmentHomeBinding.inflate(inflater, container, false) // 2. 初始化RecyclerView的布局管理器和适配器 binding.recyclerView.layoutManager = LinearLayoutManager(activity) adapter = FeedRecyclerAdapter(postArrayList) binding.recyclerView.adapter = adapter // 3. 初始化Firebase实例并加载数据 auth = FirebaseAuth.getInstance() db = FirebaseFirestore.getInstance() getDataFromFirestore() // 4. 最后返回binding的根视图 return binding.root } fun getDataFromFirestore() { db.collection("Posts").orderBy("date", Query.Direction.DESCENDING) .addSnapshotListener { snapshot, exception -> if (exception != null) { Toast.makeText(context, exception.localizedMessage, Toast.LENGTH_LONG).show() return@addSnapshotListener } snapshot?.let { if (!it.isEmpty) { postArrayList.clear() val documents = it.documents for (document in documents) { val comment = document.get("comment") as String val useremail = document.get("userEmail") as String val downloadUrl = document.get("downloadUrl") as String val post = Post(useremail, comment, downloadUrl) postArrayList.add(post) } // 空安全处理,避免adapter为null时崩溃 adapter?.notifyDataSetChanged() } } } } }
额外注意事项
- 确保
Post类中存在email属性(适配器中使用了postList.get(position).email),若Post构造参数为useremail,需保证属性名一致,否则会出现内容为空的问题。 - 调用
notifyDataSetChanged()时使用空安全调用adapter?.notifyDataSetChanged(),避免adapter未初始化导致的空指针崩溃。
内容的提问来源于stack exchange,提问作者ftgrl
相关产品推荐
相关产品推荐

