2012-04-09 12 views
5

Possiedo un ExpandableListView e desidero registrare la groupposition quando si fa clic su un gruppo. Sfortunatamente il codice qui sotto restituisce sempre 0, come se stessi facendo clic sullo 0 ° gruppo.Android ExpandableListView posizione di gruppo sempre 0

exList.setOnGroupClickListener(new OnGroupClickListener() { 

    @Override 
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
      groupPosition = ExpandableListView.getPackedPositionGroup(id); 

      Log.i("group position", groupPosition + ""); 
      return false; 
    } 

    }); 

Ho anche un longclicklistener sui gruppi e bambino che funziona a destra:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
... 
} 

Tutte le idee?

+0

Si utilizza un adattatore personalizzato per ExpandableListView? – Cata

+0

si. I miei altri listener funzionano correttamente, – erdomester

+0

ok, assicurati che i metodi getItem e getItemId restituiscano valori validi e non 0 .. (nell'adattatore personalizzato) potresti anche dare un'occhiata a questo adattatore http://developer.android.com/resources/ samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html – Cata

risposta

0

Utilizzare il listener OnGroupExpandListener, il parametro del metodo onGroupExpand è la posizione del gruppo in ExpandableListView.

Come quella:

listView = (ExpandableListView) findViewById(R.id.expandableListView); 
listView.setOnGroupExpandListener(new OnGroupExpandListener() { 
    @Override 
    public void onGroupExpand(int groupPosition) { 
     Log.d(TAG, "pos " + groupPosition); 
    } 
}); 
0
@Override 
public Object getGroup(int groupPosition) { 
    Log.i(TAG, "* getGroup : groupPosition =" + groupPosition); 

    return categories[groupPosition]; 
} 

Quando si estende BaseExpandableListAdapter, si otterrà il metodo di sostituzione di cui sopra. Il precedente Logout put mostra chiaramente il numero di gruppo cliccato.

Nel mio codice, categorie indica il set di dati che sto passando all'elenco Espandibile come gruppi.

Avrete un'altra chiamata al metodo di override;

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
... 
} 

Con questo metodo è possibile chiamare come segue;

if(getGroup(groupPosition).toString().equals("GroupName")){ 
    //Do what even you like in for the clicked group 
} 

Questo è un codice funzionante e spero che tu possa capirlo.

1

la visualizzazione di elenco espandibile potrebbe essere all'interno di una vista di scorrimento. Non puoi avere scroll annidati.

+0

Grazie! Ne avevo bisogno. Non riuscivo proprio a capire cosa sto sbagliando. Ero in questo caso. – sunlover3

+1

felice di aiutare ... !! :) – navalkishoreb

3

assicuratevi di avere questo per il layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 


    <ExpandableListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Non si può avere un ExpandableListView in uno ScrollView.

Problemi correlati