【发布时间】:2020-10-22 14:06:45
【问题描述】:
我创建了一个自定义微调器适配器,它返回两个视图(item_new_area 和 item_area),item_new_area 是静态的,带有添加新选项和 item_area 填充动态。
When Add new is selected,I want to launch the dialog for add new area but i keep on getting an error that lateinit property listener has not been initialized
自定义微调器适配器
class AreaSpinnerAdapter(private val inflater: LayoutInflater) : BaseAdapter() {
var areas: List<AreaEntity>? = null
lateinit var listener: OnItemSelectedListener
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
return when (getItemViewType(position)) {
1 -> {
val binding: ItemNewAreaBinding = DataBindingUtil.inflate<ItemNewAreaBinding>(
inflater,
R.layout.item_new_area,
parent, false
).also {
it.root.tag = it
}
binding.addNew.setOnClickListener {
listener.onClick()
}
binding.root
}
else -> {
val binding: ItemAreaBinding = DataBindingUtil.inflate<ItemAreaBinding>(
inflater,
R.layout.item_area,
parent, false
).also {
it.root.tag = it
}
binding.area = getItem(position)
binding.root
}
}
}
override fun getItemViewType(position: Int): Int {
return if (position == 1) {
1
} else {
2
}
}
fun setOnItemClickListener(listener: OnItemSelectedListener) {
this.listener = listener
}
interface OnItemSelectedListener {
fun onClick()
}
}
我尝试在片段的 onCreateView 方法中设置 on Item Clicked 监听器:
val spinnerAdapter = AreaSpinnerAdapter(layoutInflater)
spinnerAdapter.setOnItemClickListener(object :
AreaSpinnerAdapter.OnItemSelectedListener {
override fun onClick() {
addNewAreaDialog()
}
})
binding?.spinnerArea?.adapter = spinnerAdapter
错误日志
kotlin.UninitializedPropertyAccessException: lateinit property listener has not been initialized
at com.test.adapter.AreaSpinnerAdapter.getListener(AreaSpinnerAdapter.kt:15)
at com.test.adapter.AreaSpinnerAdapter$getView$1.onClick(AreaSpinnerAdapter.kt:50)
第 15 行 = lateinit var 侦听器:OnItemSelectedListener
第 25 行 = listener.onClick()
我知道我应该在调用 getView 方法之前初始化侦听器,但由于某些原因未能初始化侦听器,任何有关如何执行此操作的帮助将不胜感激。谢谢
【问题讨论】:
标签: android kotlin android-spinner onitemselectedlistener kotlin-lateinit