Kotlin中Fragment内ListView实现报错求助
解决Fragment中实现ListView的报错问题
嘿,我帮你找出了代码里的几个问题,这些应该就是你遇到报错的原因,咱们一步步来修正:
变量声明语法错误
Kotlin里声明变量时,变量名和类型之间必须加冒号,你写的private lateinit var listView ListView漏了冒号,正确写法应该是:private lateinit var listView: ListViewfindViewById的调用时机和方式不对
在Fragment的onCreateView里,你还没把布局加载(inflate)出来就直接调用findViewById,这时候根本找不到对应的ListView控件。正确的做法是先把布局inflate成View对象,再从这个View里查找控件:val view = inflater.inflate(R.layout.chatroom, container, false) listView = view.findViewById(R.id.chatroom_list_view) as ListViewArrayAdapter的参数有两处错误
- 第一个参数需要传入
Context对象,但你传的是this(当前Fragment实例),Fragment本身不是Context的子类,应该用requireContext()来获取上下文; - 第三个参数你传了一个逗号分隔的字符串,可ArrayAdapter需要的是字符串数组或者
List<String>类型的数据源。你应该把它改成List形式:
val testList = listOf("hu", "tu", "su", "send", "pe", "t") val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, testList)- 第一个参数需要传入
代码执行顺序错误
你现在是先尝试设置ListView,最后才返回布局,这会导致前面的ListView操作都是基于一个不存在的控件。正确的流程应该是:先加载布局 → 找到ListView → 设置适配器 → 最后返回布局。
修正后的完整代码
import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ListView import android.widget.ArrayAdapter class Chatroom : Fragment() { private lateinit var listView: ListView override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // 加载布局 val view = inflater.inflate(R.layout.chatroom, container, false) // 获取ListView控件 listView = view.findViewById(R.id.chatroom_list_view) as ListView // 准备数据源 val testList = listOf("hu", "tu", "su", "send", "pe", "t") // 创建适配器 val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, testList) // 设置适配器 listView.adapter = adapter // 返回布局 return view } }
按照上面的修改调整代码后,应该就能正常运行啦。
内容的提问来源于stack exchange,提问作者CoderChick
相关产品推荐
相关产品推荐

