0

Ich habe eine Liste von benutzerdefinierten Objekten und ich möchte ExpandableListView mit Daten dieser Objekte bevölkern. Aber bei der benutzerdefinierten Adapter steckte es bei getGroupCount Funktion und es stoppt ohne Fehler und nicht eine andere Funktion wie getChildrenCount übergeben. Erste getGroupCount funktioniert und nach getGroupCount aber sonst nichts. Expandablelistview wird nicht auf dem Bildschirm angezeigt. Es wird kein Fehler angezeigt und es wird kein explistview angezeigt. Ich kann das Problem nicht finden. Ich sehe, dass meine Liste Daten enthält. Adapter ist wie unten,Populate erweiterbare Listview mit benutzerdefinierten Listenobjekte in Android

public class salItemsAdapter extends BaseExpandableListAdapter { 

public List<ABSSALEITEM> extSetItems; 
public Context context; 
public LayoutInflater inflater; 
public HashMap<Integer, List<ABSSALEITEM>> extSubSetItems; 

public TextView txtSalItemHeaderClm1; 
public TextView txtSalItemHeaderClm2; 
public TextView txtSalItemHeaderClm3; 
public TextView txtSalItemBottomText; 


public salItemsAdapter(Context context, List<ABSSALEITEM> extSetItems, HashMap<Integer, List<ABSSALEITEM>> extSubSetItems) { 
    this.context = context; 
    this.extSetItems = extSetItems; 
    this.extSubSetItems = extSubSetItems; 
} 
@Override 
public int getChildrenCount(int groupPosition) { 
    return extSubSetItems.get(extSetItems.get(groupPosition)).size(); 
} 

@Override 
public int getGroupCount() { 
    return extSetItems.size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return extSetItems.get(groupPosition); 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    return extSubSetItems.get(extSetItems.get(groupPosition)).get(childPosition); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View view, ViewGroup parent) { 
    ABSSALEITEM setSalItem = (ABSSALEITEM)getGroup(groupPosition); 

    if(view == null) 
    { 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.salitems_elv_head, parent, false); 
    } 

    txtSalItemHeaderClm1 = (TextView)view.findViewById(R.id.txtSalItemHeaderClm1); 
    txtSalItemHeaderClm2 = (TextView)view.findViewById(R.id.txtSalItemHeaderClm2); 
    txtSalItemHeaderClm3 = (TextView)view.findViewById(R.id.txtSalItemHeaderClm3); 

    txtSalItemHeaderClm1.setText(setSalItem.MAT); 
    txtSalItemHeaderClm2.setText(setSalItem.EXPLAIN); 
    txtSalItemHeaderClm3.setText(Double.toString(setSalItem.QUANT)); 

    return view; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, 
         boolean isLastChild, View view, ViewGroup parent) { 
    ABSSALEITEM setSalItem = (ABSSALEITEM)getChild(groupPosition, childPosition); 
    if(view==null) 
    { 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.salitems_elv_item, parent, false); 
    } 

    txtSalItemBottomText = (TextView)view.findViewById(R.id.txtSalItemBottomText); 
    txtSalItemBottomText.setText(setSalItem.LONGEXP); 
    return view; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return false; 
} 
} 

Und ich fülle meine Datenobjekte wie

private void FillExpListView(List<ABSSALEITEM> paSalSetItems, List<ABSSALEITEM> paSalSetSubItems) { 

    hbSubSetItems = new HashMap<Integer, List<ABSSALEITEM>>(); 

    List<ABSSALEITEM> tmp = new ArrayList<ABSSALEITEM>(paSalSetSubItems); 
    List<ABSSALEITEM> tmp2 = new ArrayList<ABSSALEITEM>(); 
    Integer tmpItemnum = 0; 

    for (ABSSALEITEM tmpSalItem : tmp) { 

     tmpItemnum = tmpSalItem.ITEMNUM; 

     if(!hbSubSetItems.containsKey(tmpItemnum)) 
     { 
      tmp2.clear(); 
      for (ABSSALEITEM tmpSalItem2 : paSalSetSubItems) { 
       if (tmpItemnum == tmpSalItem2.ITEMNUM) { 
        tmp2.add(tmpSalItem2); 
       } 
      } 
      hbSubSetItems.put(tmpSalItem.ITEMNUM, tmp2); 
     } 
    } 

    adapterSalItems = new salItemsAdapter(salitems.this, paSalSetItems, hbSubSetItems); 
    elvSalItems.setAdapter(adapterSalItems); 
} 

Vielen Dank für Hilfe

Antwort

0

Sie können Bibliotheken verwenden, die auf GitHub zur Verfügung stehen. Erstellen Sie zwei Layouts: - eines für die Überschrift (Element, auf das der Benutzer klickt und es erweitert) und ein anderes für die Elemente, die beim Klicken auf die Überschrift sichtbar sind.

Einige Bibliotheken sind

enter image description here

enter image description here

enter image description here

+0

Danke Vishwesh Jainkuniya aber soll ich verstehen, dass es keine Möglichkeit gibt, kundenspezifische Adapter für Liste zu verwenden für standart erweiterbar Listview? – Safak