Fragment中RecyclerView无数据显示及No adapter attached问题求助
问题排查与解决方法
问题原因
你在类成员变量声明时,直接通过view?.findViewById(R.id.recyclerview)初始化recyclerview变量——但此时Fragment的视图还未创建,view为null,导致recyclerview一直是null。后续的recyclerview?.apply代码块因空安全判断被跳过,RecyclerView根本没设置布局管理器和适配器,最终触发「No adapter attached; skipping layout」错误,数据自然无法显示。
解决步骤
将RecyclerView的实例获取操作移到onCreateView方法中,通过刚inflate生成的view对象来查找控件:
修改后的MainFragment代码
package hr.ferit.tomislav.lucic5.tl5_projekt 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 class MainFragment : Fragment() { private lateinit var transactions : ArrayList<Transaction> private lateinit var transactionAdapter: TransactionAdapter private lateinit var linearlayoutManager: LinearLayoutManager // 先声明变量,不要在这里初始化 private var recyclerview : RecyclerView? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.fragment_main, container, false) // 在这里通过inflate后的view获取RecyclerView实例 recyclerview = view.findViewById(R.id.recyclerview) transactions = arrayListOf( Transaction("President", 400.00), Transaction("Jolly", 300.00) ) linearlayoutManager = LinearLayoutManager(context) transactionAdapter = TransactionAdapter(transactions) recyclerview?.apply { layoutManager = linearlayoutManager adapter = transactionAdapter } return view } }
额外提示
Fragment中所有与视图相关的操作,都应该在视图创建完成后执行(比如onCreateView或onViewCreated方法内),必须使用当前已创建的view对象来查找控件,避免因视图未初始化导致的空指针或控件绑定失败问题。
内容的提问来源于stack exchange,提问作者Tomislav Lučić
相关产品推荐
相关产品推荐

