ExpandableListView no se muestra en mi actividad

Estoy intentando implementar una ExpandableListView en mi aplicación, pero no se muestra.

Comprobé dos veces:

  1. La correcta denominación y reference de mis tres layouts XML (para ExpandableListView, encabezado de list y elemento de list),

  2. Depurado para ver si mis lists se están prepareListdata() en el método prepareListdata() (son).

Creo que el problema está en mi ExpandableListAdapterClass , ya que los parameters de la class listDataHeader : ArrayList<String>, listDataChild : HashMap<String, ArrayList<String>> se colorean con una línea ondulada gris como no utilizada.

¿Cómo decir correctamente a mi aplicación que esas son iguales a mis variables de miembro de actividad? ¿O hay algo obvio que me estoy perdiendo?

Aquí está mi código:

Adaptador

  class ExpandableListAdapter (context: Context, listDataHeader : ArrayList<String>, listDataChild : HashMap<String, ArrayList<String>>) : BaseExpandableListAdapter() { var listDataHeader = arrayListOf<String>() //list sub-headers var listDataChild = HashMap<String, List<String>>() //list sub-points private val inflater: LayoutInflater = LayoutInflater.from(context) override fun getGroup(groupPosition: Int): Any { return this.listDataHeader[groupPosition] } override fun isChildSelectable(p0: Int, p1: Int): Boolean { return true } override fun hasStableIds(): Boolean { return false } override fun getGroupView(groupPosition: Int, isExpanded: Boolean, convertView: View?, parent: ViewGroup?): View? { val headerTitle: Int = getGroup(groupPosition) as Int if (convertView == null) { inflater.inflate(R.layout.main_list_group_header, parent, false) } val listHeader = convertView?.findViewById<TextView>(R.id.list_header) listHeader?.setTypeface(null, Typeface.BOLD) listHeader?.setText(headerTitle) return convertView } override fun getChildrenCount(groupPosition: Int): Int { return this.listDataChild[this.listDataHeader[groupPosition]]!!.size } override fun getChild(groupPosition: Int, childPosition: Int): Any { return this.listDataChild[this.listDataHeader[groupPosition]]!![childPosition] } override fun getGroupId(groupPosition: Int): Long { return groupPosition.toLong() } override fun getChildView(groupPosition: Int, childPosition: Int, isLastChild: Boolean, convertView: View?, parent: ViewGroup?): View? { val childText: Int = getChild(groupPosition, childPosition) as Int if (convertView == null) { inflater.inflate(R.layout.main_list_item, parent, false) } val textListChild = convertView?.findViewById<TextView>(R.id.list_item) textListChild?.setText(childText) return convertView } override fun getChildId(groupPosition: Int, childPosition: Int): Long { return childPosition.toLong() } override fun getGroupCount(): Int { return this.listDataHeader.size } } 

El rest de las funciones MainActivity y prepareListData ()

 class MainListActivity : AppCompatActivity() { lateinit var adapter : ExpandableListAdapter val listDataHeader = arrayListOf<String>() val listDataChild = HashMap<String, ArrayList<String>>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_mainlistctivity) prepareListData() adapter = ExpandableListAdapter(this, listDataHeader, listDataChild) expandable_list.setAdapter(adapter) } private fun prepareListData() { listDataHeader.add("Gathering data") listDataHeader.add("Simulate") val gatheringDataChildList = arrayListOf<String>() gatheringDataChildList.add("Record data: video + accelerometer") val simulateChildList = arrayListOf<String>() simulateChildList.add("Driving simulator") listDataChild.put(listDataHeader[0], gatheringDataChildList) listDataChild.put(listDataHeader[1], simulateChildList) } 

Aquí está la captura de pantalla de lo que estoy tratando de lograr: enter image description here

Estabas muy cerca de resolver el problema 🙂

  class ExpandableListAdapter (context: Context, listDataHeader : ArrayList<String>, listDataChild : HashMap<String, ArrayList<String>>) : BaseExpandableListAdapter() { var listDataHeader = arrayListOf<String>() //list sub-headers var listDataChild = HashMap<String, List<String>>() //list sub-points //... } 

En la primera línea, especifica los parameters del constructor, sin embargo, no los usa en absoluto. ( var listDataHeader es la propiedad de la class, lo que significa que es algo diferente del parámetro constructor listDataHeader )

Probablemente quieras algo como esto:

  class ExpandableListAdapter (context: Context, private val listDataHeader : ArrayList<String>, private val listDataChild : HashMap<String, ArrayList<String>>) : BaseExpandableListAdapter() { //no declaration of another fields //rest of adapter code here... } 

Tenga en count private val antes de los parameters del constructor. Esas son properties de class declaradas directamente dentro del constructor. Puede leer más sobre ellos aquí: https://kotlinlang.org/docs/reference/classes.html