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

Fragment中RecyclerView报No adapter attached错误且未显示的解决求助

解决RecyclerView报错No adapter attached; skipping layout及不显示问题

核心问题分析

你的代码存在两个关键问题导致报错和RecyclerView无法显示:

  1. 代码执行顺序错误:onCreateView中return view语句写在RecyclerView初始化代码之前,导致设置布局管理器、绑定适配器的代码完全不会执行,RecyclerView无任何配置,触发No adapter attached报错。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:40:54