2016-04-08 20 views
0

Ich mache eine ExpandableListView folgen viele Tutorial und einige Fehler Fragen von SO. Die Elternliste besteht aus zwei TextView und einem ImageButton mit Standardlayout. Die Child-Liste besteht aus einem einzelnen TextView. Die Datenquelle stammt von der SQLite-Datenbank aus Aktivität und wird in ArrayList generiert.Android ExpandableListView getChildView nicht triggern

Das Problem:

Irgendwie ist die übergeordnete Gruppe Liste arbeitet normal weiter, auch die Taste funktioniert, aber wenn ich zu erweitern versuchen, es wird nicht erweitern. Also versuche ich, eine Toast-Nachricht zu setzen, aber nach dem Öffnen der Aktivität, aber es sieht aus wie getChildView() Methode überhaupt nicht auslösen, weil die Toast-Nachricht überhaupt nicht angezeigt wird.

Die ExpandableListAdapter Klasse ist wie dieser

public class InventoryListExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context context; 
    private ArrayList<Inventory> data; 
    private HashMap<String, ArrayList<String>> list_data; 

    public InventoryListExpandableListAdapter(Context context, ArrayList<Inventory> data, HashMap<String, ArrayList<String>> list_data) { 
     this.context = context; 
     this.data = data; 
     this.list_data = list_data; 
    } 

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

    @Override 
    public int getChildrenCount(int groupPosition) {return list_data.get(data.get(groupPosition)).size();} 

    @Override 
    public Inventory getGroup(int groupPosition) {return data.get(groupPosition);} 

    @Override 
    public Object getChild(int groupPosition, int childPosition) {return list_data.get(data.get(groupPosition).getCode()).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 true;} 

    @Override 
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      final Inventory inventory = getGroup(groupPosition); 

      convertView = View.inflate(context, R.layout.listview_layout_two_row_delete, null); 
      ImageButton btnDelete = (ImageButton)convertView.findViewById(R.id.btnDelete); 
      TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
      TextView text2 = (TextView)convertView.findViewById(R.id.text2); 

      text1.setText(inventory.getCode()); 
      text2.setText(inventory.getItem()); 

      btnDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(context, "DELETED", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
     return convertView; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
     final String childText = (String)getChild(groupPosition, childPosition); 
     LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = infalInflater.inflate(R.layout.listview_layout_single_text, null); 
     } 
     Toast.makeText(context, "Make Child number "+String.valueOf(childPosition), Toast.LENGTH_SHORT).show(); 

     TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
     text1.setText(childText); 
     return convertView; 
    } 

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

} 

ich für jede Hilfe schätzen Sie geben. Vielen Dank.

+1

wenn es nicht wahrscheinlich genannt, weil 'getChildrenCount' ist 0 – Blackbelt

+0

Rückkehr ich es überprüft haben und die Größe ist nicht 0 – poring91

Antwort

0

Änderung hasStableIds Methode

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

** Bitte ändern Sie Ihre getGroupView Methode :: **

@Override 
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      final Inventory inventory = getGroup(groupPosition); 

      convertView = View.inflate(context, R.layout.listview_layout_two_row_delete, null); 
      } 
      ImageButton btnDelete = (ImageButton)convertView.findViewById(R.id.btnDelete); 
      TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
      TextView text2 = (TextView)convertView.findViewById(R.id.text2); 

      text1.setText(inventory.getCode()); 
      text2.setText(inventory.getItem()); 

      btnDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(context, "DELETED", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

     return convertView; 
    } 
+0

Es ist immer noch nicht funktioniert. Die Liste wird immer noch nicht erweitert – poring91

0

Ich verbrachte Stunden damit, das gleiche Problem finden, nur zu erkennen, es war etwas, Ganz einfach auf meiner Seite:

  1. Sie haben einen ImageButton in th e GroupView, die die Berührung abfängt, um die Ansicht zu erweitern. Verwenden Sie diese Option, es zu beheben:

android: fokussierbarem = "false" android: focusableInTouchMode = "false"

  1. Da die Gruppenansicht nicht erweitert wird, gibt es Es gibt keinen Grund, CPU-Zyklen zu verschwenden, um eine Ansicht zu erhalten, die nicht angezeigt wird.
  2. Alle Methoden im Adapter, die sich auf die untergeordneten Elemente beziehen, werden nicht aufgerufen.

Try Aufruf expandableListView.expandGroup (0 ... n) auf manuell zu erweitern und sehen, ob es die kindbezogenen Methoden im Adapter

genannt
0

ich einen anderen Weg gefunden, die getChildView haben() aufgerufen, wenn es nicht automatisch in der ExpandedListAdapter-Klasse aufgerufen wird. Es ist eine Verknüpfung, die das Problem irgendwie zu lösen scheint.Ich habe eine erweiterte Listenansicht, wobei die übergeordneten Gruppenelemente eine Liste von Kontrollkästchen sind. Durch Klicken auf die Kontrollkästchen werden die untergeordneten Elemente angezeigt . Hier ist, wie ich die Funktion getGroupView() codiert habe.

@Override 
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, final ViewGroup viewGroup) 
{ 
    if (convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) m_context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.expandable_list_milk_type,null); 
    } 
    final CheckBox cbMilkType = (CheckBox) convertView.findViewById(R.id.cb_milk_type); 
    cbMilkType.setText(m_listMilktype.get(groupPosition)); 

    cbMilkType.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ExpandableListView expandableListView = (ExpandableListView)viewGroup; 
      cbMilkType.toggle(); 
      if (!isExpanded) { 
       expandableListView.expandGroup(groupPosition); 
      } 
      else { 
       expandableListView.collapseGroup(groupPosition); 
      } 
     } 
    }); 
    return convertView; 
} 
Verwandte Themen