Hashmap con tipo de datos ArrayList (Kotlin)?

Estas son las variables y la diversión addControl que utilicé.

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() } 

Y puse el listChild.put en la anulación de la diversión en la class interna GetData ext AsyncTask. El error en arrayTQ es sobre el tipo de datos que TongQuan no coincide con Any. En Java, no es necesario agregar typedata después de ArrayList en HashMap. Ayúdame a solucionarlo, busqué y probé. Gracias chicos.

 override fun onPostExecute(result: ArrayList<String>) { super.onPostExecute(result) getDataTQ() getDataBG() listChild.clear() listChild.put(listHeader.get(1), arrayTQ) } 

ArrayList<TongQuan> no es un elemento secundario de ArrayList<Any> .

Entonces en lugar de esto: listChild = HashMap<String, ArrayList<Any>>()

deberías tener: listChild = HashMap<String, ArrayList<TongQuan>>()


Sin embargo, esto le permitirá agregar solo ArrayList<TongQuan> . Si desea la posibilidad de agregar ArrayList<TongQuan> o ArrayList<BangGia> , entonces debe hacer lo siguiente:

listChild = HashMap<String, ArrayList<out Any>>()

Para get una documentation detallada sobre la varianza, consulte aquí: https://kotlinlang.org/docs/reference/generics.html

Any es diferente con Object en Java. A diferencia de Java, donde cada class es hija de Object, en kotlin no todas las classs son hijos de Any .

En lugar de utilizar ArrayList, debe usar la list de kotlin. debería funcionar así:

 ar arrayTQ = mutableListOf<TongQuan>() var arrayBG = mutableListOf<BangGia>() var epdbLV: ExpandableListView? = null var listHeader: List<String> = listOf() var listChild = HashMap<String, List<Any>>() var arrayListData = mutableListOf<String>() private fun addControl() { epdbLV = findViewById(R.id.epdbList) listHeader = ArrayList() listChild = HashMap<String, List<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.clear() arrayTQ.clear() arrayBG.clear() } 

debe ser seguro llamar

 override fun onPostExecute(result: ArrayList<String>) { super.onPostExecute(result) getDataTQ() getDataBG() listChild.clear() listChild.put(listHeader.get(1), arrayTQ) } 

como sugiere @Henry, debes leer la variación de kotlin https://kotlinlang.org/docs/reference/generics.html

  • por qué las asignaciones no son declaraciones
  • ¿Cuál es el campo de anotación de Kotlin Equivlant a Java con el tipo de comodín delimitado?
  • Kotlin networkinguce la function para que la list 2d no funcione
  • Accediendo a sets fuente con kotlin-dsl para gradle
  • Java modifica el contenido de la class kotlin a nulo
  • ¿Por qué el comstackdor de Kotlin requiere el inicializador explícito de la propiedad var?
  • Cómo establecer el valor de propiedad pnetworkingeterminado de Kotlin a `this`
  • La documentation de Kotlin no admite tags como '<p>'.
  • Error de configuration de Kotlin
  • Kotlin: cómo get el valor del atributo de anotación
  • La ambigüedad de resolución de sobrecarga en el número de parameters lambda