2011-12-12 26 views

Respuesta

1

Establecer el padre IEW vlayout params hieght a cero en su BaseExpandableListAdapter de manera que se puede ocultar que los padres

+0

He intentado parent.getLayoutParams() Altura = 0.; parent.invalidate(); pero no hace nada: Lo he intentado: parent.setLayoutParams (new ViewGroup.LayoutParams (ViewGroup.LayoutParams.FILL_PARENT, 0)); pero lanza una ClassCastException :( ¿Has probado esto o has adivinado? – Giorgio

11

1) Ocultar el indicador de grupo con:

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

2) devuelva un FrameLayout vacío para los grupos que desea que estén vacíos como este:

@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) Llame a expandGroup para los grupos que no se muestra la barra de grupo:

expandableListView.expandGroup(GROUP_ID); 

4) Si desea mostrar un indicador de grupo hay que añadir una ImageView programación del método getGroupView. Consulte esta publicación en el blog para obtener más información sobre cómo ocultar/mostrar el indicador de grupo: Hiding group indicator for empty groups

+0

Devolviendo un FrameLayout ha sido el truco. Gracias :) – Atmaram

+0

Gracias por el truco. Esta es la única respuesta que funcionó para mí. De todos modos, ¿no es un poco hacky? No entiendo por qué no es una forma "oficial" de ocultar el encabezado. – kazbeel

+0

Este es el truco: View view = new FrameLayout (context); – Derzu

9

Tuve el mismo problema y esto resolvió mi problema. En el adaptador de su Listview, agregue lo siguiente a getGroupView.

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

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

Esto dejará en blanco el grupo 0 de la lista.

Donde el diseño en blanco es un diseño con alguna vista dentro que tiene layout_height = 0dp. ¡Funciona!

+0

Acabo de probar esto, y de hecho funciona, pero causa un comportamiento extraño con los grupos visibles restantes en la lista expandible. ¡Solución inteligente, sin embargo! – LargeGlasses

2

En lugar de devolver un diseño en blanco, viajo por todos los elementos en el diseño y llamo al view.setVisibility(View.Gone) cuando no hay datos.

@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; 
} 
Cuestiones relacionadas