0

Ich versuche, eine ExpandableListView in meiner App zu implementieren, aber sie wird nicht angezeigt.ExpandableListView wird nicht in meiner Aktivität angezeigt

Ich doppelt geprüft:

  1. Die korrekte Namensgebung und unter Bezugnahme zu allen meinen drei XML-Layouts (für ExpandableListView, Listenkopf und Listenelement),

  2. Gedebuggte zu sehen, ob meine Listen werden in prepareListdata() Methode ausgefüllt (sie sind).

Ich denke, das Problem in meinem ExpandableListAdapterClass ist, da die Klasse listDataHeader : ArrayList<String>, listDataChild : HashMap<String, ArrayList<String>> werden immer gefärbt mit einem verschnörkelten grau Zeilenparameter als nicht verwendet.

Wie kann ich meiner App mitteilen, dass diese meinen Aktivitätsmitgliedsvariablen entsprechen? Oder gibt es etwas Offensichtliches, das mir fehlt?

Hier ist mein Code:

Adapter

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

Der Rest MainActivity und prepareListData() Funktion

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

Hier ist der Screenshot von dem, was ich zu erreichen versuchen: enter image description here

+0

Also, was Sie wollen genau bevölkert werden? Farbiger Gegenstand oder etwas anderes? bedeutet, dass Ihre Sicht in Aktivität leer ist? –

+0

@AjayPandya ja. Weder meine Kopfzeilen noch meine untergeordneten Elemente werden angezeigt. Die Ansicht ist komplett leer. – lidkxx

+0

@lidkxx ist 'erweiterbare_liste' ein' RecyclerView'? Wenn ja, müssen Sie 'layoutManager' angeben (am wahrscheinlichsten' LinearLayoutManager') – rafal

Antwort

0

Sie waren sehr nahe, das Problem zu lösen :)

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 
     //... 
} 

Auf der ersten Zeile, die Sie Konstruktor Parameter angeben, aber Sie sie nicht benutzen. (var listDataHeader ist Klasse Eigenschaft, was bedeutet, dass es etwas anderes als Konstruktorparameter listDataHeader)

Sie wahrscheinlich so etwas wie dies wollen:

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... 
} 

Bitte beachten Sie private val vor Konstruktorparameter. Dies sind Eigenschaften der Klasse, die direkt im Konstruktor deklariert werden. Sie können mehr über sie hier lesen: https://kotlinlang.org/docs/reference/classes.html

+0

Vielen Dank für Ihre Hilfe! Ich denke, das ist, was ich gesucht habe (kann nicht 100% sagen, wie ich eine böse Bibliothek bekomme "/system/lib64/libhwuibp.so" nicht gefunden, Senden SIG 9 Fehler jetzt, aber das scheint wie ein anderes Problem). Eine kleine Dokumentation hat niemals jemanden getötet, schätze ich. – lidkxx

Verwandte Themen