2011-12-12 16 views

risposta

1

Impostare il genitore iew vlayout params hieght a zero nel vostro BaseExpandableListAdapter in modo che si può nascondere che si genitore

+0

Ho provato parent.getLayoutParams() height = 0.; parent.invalidate(); ma non fa nulla: Ho provato: parent.setLayoutParams (nuovo ViewGroup.LayoutParams (ViewGroup.LayoutParams.FILL_PARENT, 0)); ma lancia un ClassCastException :( Hai provato questo o hai indovinato? – Giorgio

11

1) Nascondere l'indicatore di gruppo con:

android:groupIndicator="@android:color/transparent" 

2) restituire un FrameLayout vuoto per i gruppi che si desidera vuoto in questo modo:

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

    //By default the group is hidden 
    View view = new FrameLayout(context); 

    String groupTitle = getGroup(groupPosition).toString(); 

    //in case there's more than one group and the group title is not empty then show a TextView within the group bar 
    if(getGroupCount() > 1 && !groupTitle.isEmpty()) { 

     view = getGenericView(); 
     ((TextView)view).setText(groupTitle); 
    } 

    return view; 

} 

3) Chiamare expandGroup per i gruppi non si sta mostrando la barra di gruppo:

expandableListView.expandGroup(GROUP_ID); 

4) Se si desidera visualizzare un indicatore di gruppo si deve aggiungere un ImageView a livello di codice dal metodo getGroupView. Controlla questo post sul blog per maggiori informazioni su nascondere/mostrare l'indicatore di gruppo: Hiding group indicator for empty groups

+0

Restituire un FrameLayout ha fatto il trucco Grazie :) – Atmaram

+0

Grazie per il trucco. Questa è l'unica risposta che ha funzionato per me. Comunque, non è un po 'hacky? Non capisco perché non sia un modo "ufficiale" per nascondere l'intestazione. – kazbeel

+0

Questo è il trucco: Visualizza vista = nuovo FrameLayout (contesto); – Derzu

9

Ho avuto lo stesso problema e questo ha risolto il mio problema. Nell'adattatore di Listview, aggiungere quanto segue a getGroupView.

if (groupPosition == 0) { 
    convertView = layoutInflater.inflate(R.layout.blank_layout, null); 

} else { 
    convertView = layoutInflater.inflate(R.layout.group_indicator_cell,null); 
} 

Ciò annullerà lo 0 ° gruppo della lista.

Dove layout vuoto è un layout con una vista all'interno di layout_height = 0dp. Funziona!

+0

Ho appena provato questo, e funziona davvero, ma provoca un comportamento strano con i restanti gruppi visibili nell'elenco espandibile. Soluzione intelligente, tuttavia! – LargeGlasses

2

Invece di restituire un layout vuoto, percorro tutti i bambini nel layout e chiamo view.setVisibility(View.Gone) quando non ci sono dati.

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

    LinearLayout lo; 

    if (convertView != null) { 
     lo = (LinearLayout) convertView; 
    } else { 
     lo = (LinearLayout) mLayoutInflater.inflate(R.layout.list_item_group_header, parent, false); 
    } 

    int visibility = mData.size() == 0 ? View.GONE : View.VISIBLE; 
    for (int i = 0; i < lo.getChildCount(); i++) { 
     lo.getChildAt(i).setVisibility(visibility); 
    } 
    return lo; 
} 
Problemi correlati