2012-05-29 16 views
7

Estoy desarrollando una aplicación para Android.¿Cómo poner un botón dentro del elemento de grupo en una ExpandableListView?

¿Cómo podría poner un botón en un grupo de ExpandableListView?

Al hacer clic en el botón se mostrará un cuadro de diálogo en lugar de abrir o cerrar el grupo. Haga clic fuera del botón, el grupo debería comportarse normalmente abriendo y cerrando.

La imagen a continuación muestra dónde me gustaría insertar el botón.

http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png

+0

eran U capaz de resolver esto todavía? – modabeckham

Respuesta

0

he creado mi propia ExpandableListView. Usé diseños en XML y clases para construir el componente.

Y, sorprendentemente, fue muy fácil de hacer.

Era mucho más fácil de entender que el ExpandableListView estándar porque creé una clase y un diseño para cada elemento de la lista (para la lista en sí, para el grupo y para los elementos). No había necesidad de meterse con listas de listas de mapas, lo que en mi opinión disminuye la expresividad y la legibilidad del código.

Además, la lista se vuelve extremadamente flexible y personalizable. Puedo agregar y eliminar fácilmente grupos y elementos en tiempo de ejecución. Ahora puedo modificar libremente la apariencia y los componentes internos de la lista.

El ExpandableListView que he creado puede hacer lo mismo que el estándar y más. Simplemente no puedo decir si el rendimiento se vio afectado, pero no noté ningún problema visible.

+0

¿cómo conseguiste poner el botón y hacerlo funcionar? Tengo este problema y no puedo encontrar una solución http://stackoverflow.com/questions/11205052/button-in-a-row-in-expandablelistview – noloman

0

Necesitas inflar el groupView con un archivo XML personalizado que contiene un botón, como éste (por ejemplo inflate_xml_groupview.xml):

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/FrameLayoutGroupView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 


    <Button 
     android:id="@+id/myButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ButtonOfMyExpandableListGroupView" 
     android:visibility="visible" /> 

</FrameLayout> 

entonces usted tiene que crear un ExpandableListAdapter a medida que se extiende BaseExpandableListAdapter y obtener el botón ON el método getGroupView(), como este:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 

     convertView = inflater.inflate(R.layout.inflate_xml_groupview, null); 
     holder = new ViewHolder(); 
     holder.Button = (Button) convertView.findViewById(R.id.myButton); 
     convertView.setTag(holder); 
     } else { 
     holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.position = ListOfItems.get(groupPosition).getPosition(); 
     Button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       Toast.makeText(getApplicationContext(), "Button " + groupPosition + " is clicked !", Toast.LENGTH_SHORT).show(); 
       // DO STUFF 
     } 
    }); 
} 

Espero que esto ayude.

19

Android ExpandableListView puede tener cualquier botón en Grupo o secundario.

Asegúrese de que el botón no se pueda enfocar como se indica a continuación en el adaptador.

editButton.setFocusable(false); 

esto le ayudará a hacer clic en el botón de grupo y en el interior group.parent separado

+0

Sí, esta debería ser la respuesta. –

+6

Es importante hacerlo en código, no en XML. Funciona como un encanto, gracias por compartir. –

+0

Mismo problema para mí. Casilla de verificación con diseño de encabezado ... sin expandir/contraer. después de agregar esta línea funciona como encanto –

Cuestiones relacionadas