2012-05-29 5 views
7

Sto sviluppando un'applicazione per Android.Come inserire un pulsante all'interno di una voce di gruppo in ExpandableListView?

Come avrei potuto mettere un pulsante in un gruppo di un ExpandableListView?

Cliccando sul pulsante in una finestra di dialogo sarà visualizzato al posto di aprire o chiudere il gruppo. Fare clic all'esterno del pulsante, il gruppo dovrebbe comportarsi normalmente in apertura e chiusura.

L'immagine seguente mostra dove desidero inserire il pulsante.

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

+0

erano u in grado di risolvere questo ancora? – modabeckham

risposta

0

ho creato il mio ExpandableListView. Ho usato i layout in XML e le classi per creare il componente.

E sorprendentemente è stato molto facile da fare.

È stato molto più facile da capire rispetto allo standard ExpandableListView perché ho creato una classe e un layout per ogni elemento della lista (per la lista stessa, per il gruppo e per gli elementi). Non c'era bisogno di scherzare con elenchi di elenchi di mappe, che a mio parere riducono l'espressività e la leggibilità del codice.

Inoltre, l'elenco diventa estremamente flessibile e personalizzabile. Posso facilmente aggiungere e rimuovere gruppi e oggetti in fase di runtime. Ora posso modificare liberamente l'aspetto e i componenti interni della lista.

Il ExpandableListView creato può fare lo stesso dello standard e altro. Non riesco a capire se la performance è stata compromessa, ma non ho notato alcun problema visibile.

+0

come hai fatto a mettere il pulsante e farlo funzionare? Ho riscontrato questo problema e non riesco a trovare una soluzione http://stackoverflow.com/questions/11205052/button-in-a-row-in-expandablelistview – noloman

0

È necessario gonfiare il GroupView con un file XML personalizzato contenente un pulsante, come questo (ad es 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> 

Poi si deve creare un ExpandableListAdapter personalizzato che si estende BaseExpandableListAdapter e ottenere il pulsante di accensione il metodo getGroupView(), come questo:

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 
     } 
    }); 
} 

Spero che questo aiuti.

19

Android ExpandableListView può avere alcun pulsante del gruppo o un bambino.

Assicurarsi che il pulsante non è attivabile come qui di seguito in adattatore.

editButton.setFocusable(false); 

questo aiuterà a fare clic su Gruppo e Button all'interno group.parent separatamente

+0

Sì, questa dovrebbe essere la risposta. –

+6

È importante farlo in codice, non in XML. Funziona come un fascino, grazie per la condivisione. –

+0

Lo stesso problema per me. Casella di controllo con il layout dell'intestazione .. non espandibile/collassabile. dopo aggiungere questa linea funziona come fascino –

Problemi correlati