android - 片段中的 Listview 适配器给出空指针异常
问题描述
我在一个片段中做了一个列表视图列表视图的适配器有一个空指针异常但是Arraylist和适配器不为空。
错误:lvElevator 不能为空
错误是针对以下行
lvElevator.adapter = EAdapter
片段类
var EList=ArrayList<E1List>()
class EDetails: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
EList.add(E1List(1))
EList.add(E1List(2))
var EAdapter = EleAdapter(EList)
lvElevator.adapter = EAdapter
return inflater.inflate(R.layout.fragment_elevators, container, false)
}
inner class EleAdapter : BaseAdapter {
var EListAdapter = ArrayList<E1List>()
constructor(EListAdapter: ArrayList<E1List>) : super() {
this.EListAdapter = EListAdapter
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var myView = layoutInflater.inflate(R.layout.elevator_ticket, null)
var myEle = EListAdapter[position]
myView.tvEnum.text = myEle.elevatornum.toString()
return myView
}
override fun getItem(position: Int): Any {
return EListAdapter[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return EListAdapter.size
}
}
}
解决方案
您正在尝试在片段膨胀 xml 布局文件之前定义 lvElevator。有两种方法可以修复它。
1)改用onViewCreated()
方法将数据加载到视图中。并使用 onCreateView 方法仅膨胀视图。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
EList.add(E1List(1))
EList.add(E1List(2))
var EAdapter = EleAdapter(EList)
lvElevator.adapter = EAdapter
}
2)修改onCreateView()
方法如下。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Define views manually..
val view = inflater.inflate(R.layout.fragment_elevators, container, false)
val lvElevator = view.findViewById<ListView>(R.id.lvElevator)
EList.add(E1List(1))
EList.add(E1List(2))
var EAdapter = EleAdapter(EList)
lvElevator.adapter = EAdapter
return view
}
作为一名经验丰富的开发人员,我建议使用第一种方法,因为该方法只有在布局完全膨胀后才会出现。
推荐阅读
- javascript - 使用 angularjs 创建水平时间轴
- delphi - Delphi:最小化应用程序时Windows消息失败
- javascript - 通过下拉菜单导航的箭头触发站点滚动
- jquery - jQuery this 关键字与 typescript this 冲突
- javascript - 浏览器看不到 Webpack 导出的变量
- node.js - 使用nodejs从cloudinary中获取图像的exif(image_metadata)
- appium - appium - 如何在原生 android 应用程序中获取元素的背景颜色
- javascript -
- 不从firebase填充名称
- python - Python 电子邮件库 - 解析消息/rfc822 附件
- git - 如何将托管在gerrit上的代码库集成到jenkins?