2012-05-29 5 views
7

Zajmuję się tworzeniem aplikacji dla systemu Android.Jak umieścić przycisk wewnątrz elementu grupy w ExpandableListView?

Jak mogę umieścić przycisk w grupie ExpandableListView?

Kliknięcie przycisku spowoduje wyświetlenie okna dialogowego zamiast otwierania lub zamykania grupy. Kliknij poza przyciskiem, grupa powinna zachowywać się normalnie podczas otwierania i zamykania.

Poniższy obrazek pokazuje, gdzie chciałbym wstawić przycisk.

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

+0

były u w stanie rozwiązać ten problem jeszcze? – modabeckham

Odpowiedz

0

tworzę własne ExpandableListView. Użyłem układów w XML i klasach do zbudowania komponentu.

Zaskakująco było to bardzo łatwe.

O wiele łatwiej było zrozumieć niż standardowy program ExpandableListView, ponieważ utworzyłem klasę i układ dla każdego elementu listy (dla samej listy, dla grupy i dla elementów). Nie było potrzeby mieszania list z listami map, co moim zdaniem zmniejsza wyrazistość i czytelność kodu.

Dodatkowo lista staje się niezwykle elastyczna i dostosowywana. Mogę łatwo dodawać i usuwać grupy i elementy w czasie wykonywania. Teraz mogę dowolnie modyfikować wygląd i wewnętrzne składniki listy.

Utworzony przeze mnie ExpandableListView może zrobić to samo co standard i więcej. Nie można stwierdzić, czy wydajność została zmniejszona, ale nie zauważyła żadnego widocznego problemu.

+0

jak udało ci się umieścić przycisk i sprawić, żeby działało? Mam ten problem i nie mogę wymyślić rozwiązania http://stackoverflow.com/questions/11205052/button-in-a-row-in-expandablelistview – noloman

0

trzeba nadmuchać GroupView z niestandardowego pliku XML zawierającego przycisk, jak ten (np 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> 

Następnie trzeba utworzyć niestandardową ExpandableListAdapter który rozciąga BaseExpandableListAdapter i dostać przycisk na metoda getGroupView(), taka jak ta:

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

Mam nadzieję, że to pomoże.

19

Android ExpandableListView może mieć dowolne przyciski w grupie lub podrzędnie.

Upewnij się, że przycisk nie umożliwia ustawiania ostrości jak poniżej w adapterze.

editButton.setFocusable(false); 

pomoże to kliknij na przycisk wewnątrz grupy i group.parent osobno

+0

Tak, to powinna być odpowiedź. –

+6

Ważne jest, aby zrobić to w kodzie, a nie XML. Działa jak urok, dzięki za udostępnianie. –

+0

Dla mnie ten sam problem. Pole wyboru z układem nagłówka .. nie rozwijanie/zwijanie. po dodaniu ta linia działa jak wdzięk –