这是我使用的变量和addControl乐趣 .
var arrayTQ = ArrayList<TongQuan>()
var arrayBG = ArrayList<BangGia>()
var epdbLV: ExpandableListView? = null
var listHeader: List<String> = listOf()
var listChild = HashMap<String, ArrayList<Any>>()
var arrayListData = ArrayList<String>()
private fun addControl() {
epdbLV = findViewById(R.id.epdbList)
listHeader = ArrayList()
listChild = HashMap<String, ArrayList<Any>>()
listHeader = listOf("Tổng Quan Thị Quan Thị Trường, Bảng Giá, Lịch Sự Kiện, Tin Tức, Chỉ Số Thế Giới")
arrayListData = ArrayList()
arrayTQ = ArrayList()
arrayBG = ArrayList()
}
我将listChild.put置于内部类GetData扩展AsyncTask的覆盖乐趣中 . arrayTQ的错误是关于TongQuan与Any不匹配的数据类型 . 在Java中,不需要在HashMap中的ArrayList之后添加typedata . 帮帮我修复它,我搜索过并尝试过 . 多谢你们 .
override fun onPostExecute(result: ArrayList<String>) {
super.onPostExecute(result)
getDataTQ()
getDataBG()
listChild.clear()
listChild.put(listHeader.get(1), arrayTQ)
}
2 回答
ArrayList<TongQuan>
不是ArrayList<Any>
的孩子 .所以不是这样的:
listChild = HashMap<String, ArrayList<Any>>()
你应该:
listChild = HashMap<String, ArrayList<TongQuan>>()
但是,这将允许您只添加
ArrayList<TongQuan>
. 如果您想要添加ArrayList<TongQuan>
或ArrayList<BangGia>
,则需要执行以下操作:listChild = HashMap<String, ArrayList<out Any>>()
有关差异的详细文档,请参阅此处:https://kotlinlang.org/docs/reference/generics.html
Any
与Java中的Object
不同 . 与java中的每个类都是Object的子类不同,在kotlin中并不是每个类都是Any
的子类 .您应该使用kotlin List而不是使用ArrayList . 它应该像这样工作:
打电话应该是安全的
正如@Henry所说,你应该阅读kotlin Variance https://kotlinlang.org/docs/reference/generics.html