2013-08-21 9 views
5

Próbuję utworzyć ExpandableListView z SimpleExpandableListAdapter (Wiem, mogę samodzielnie rozszerzyć nowy adapter, ale chcę wypróbować prostyExapndableListAdapter).W jaki sposób powinny być dane dla SimpleExpandableListAdapter zorganizowane

Teraz napotykam problemy, gdy próbuję utworzyć nową instancję SimpleExpandableListAdapter.

Wydarzenie Czytałem references, nie jestem dokładnie pewien, co oznacza parametry, zwłaszcza groupData i childData.

Chociaż wiem, że muszę utworzyć listę Map i listę list of Map, ale jakie dane należy tam umieścić? Jak je zorganizować?

Na przykład, to są dane, które chcę wyświetlić, jak je uporządkować?

++Development Team 
    John 
    Bill 
++Data Process Team 
    Alice 
    David 

BTW, czy to znaczy, że muszę utworzyć dwa układy dla widoku grupy i dziecka?

Mam google i czytać samouczek raz za razem, ale nie mogę tego zrozumieć.

Mam nadzieję, że ktoś może dać mi wyjaśnienie.

Odpowiedz

7

Oto prosta próbka, którą chciałeś, rozwiąże wszystkie wątpliwości.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import android.app.ExpandableListActivity; 
import android.os.Bundle; 
import android.widget.ExpandableListAdapter; 
import android.widget.SimpleExpandableListAdapter; 

public class SimpleExpandableListExampleActivity extends ExpandableListActivity { 
    private static final String NAME = "NAME"; 

    private ExpandableListAdapter mAdapter; 

    private String group[] = {"Development" , "Data Process Team"}; 
    private String[][] child = { { "John", "Bill" }, { "Alice", "David" } }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); 
     List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); 
     for (int i = 0; i < group.length; i++) { 
      Map<String, String> curGroupMap = new HashMap<String, String>(); 
      groupData.add(curGroupMap); 
      curGroupMap.put(NAME, group[i]); 

      List<Map<String, String>> children = new ArrayList<Map<String, String>>(); 
      for (int j = 0; j < child[i].length; j++) { 
       Map<String, String> curChildMap = new HashMap<String, String>(); 
       children.add(curChildMap); 
       curChildMap.put(NAME, child[i][j]); 
      } 
      childData.add(children); 
     } 

     // Set up our adapter 
     mAdapter = new SimpleExpandableListAdapter(this, groupData, 
       android.R.layout.simple_expandable_list_item_1, 
       new String[] { NAME }, new int[] { android.R.id.text1 }, 
       childData, android.R.layout.simple_expandable_list_item_2, 
       new String[] { NAME }, new int[] { android.R.id.text1 }); 
     setListAdapter(mAdapter); 
    } 

} 

Wszystko co musisz zrobić, to

  • Utwórz projekt Android z SimpleExpandableListExampleActivity jako swojej głównej działalności ..
  • Kopiuj-wklej kod podany w tej działalności.
  • to wszystko .. Uruchom swój kod ...

Hope this helps ...

+1

To działa. Ale zastanawiam się, skąd znasz klucz "NAZWA" i jak znasz identyfikatory ids "R.id.text1" i etc? BTW, okazało się, że wskaźnik nie jest wyrównany z tekstem, czy jest jakiś pomysł, aby je dostosować? Zobacz: http: //i.imgur.com/aeznDf7.png – hguser

+0

Zauważyłeś, że 'android.R' użył .. oznacza to, że użyłem układu jaki zapewnia Android, nie stworzyłem go ... Możesz znaleźć co to jest, po prostu ** Naciśnij Ctrl + android.R.layout.simple_expandable_list_item_1 ** Znajdziesz tam tekst 'TextView' o nazwie text1 ... Jeśli chodzi o wyrównanie wskaźnika z tekstem, to czy testujesz na emulatorze?, jeśli tak, to co (nie widzę tutaj ...), sprawdź na prawdziwym urządzeniu ... Daj mi znać, jeśli chcesz wiedzieć coś jeszcze .. :) – CRUSADER

0

Istnieje dosłownie tyle przykładów na twoje wymagania!

W każdym razie możesz zajrzeć do tego bloga, jeśli już go nie masz.

http://www.coderzheaven.com/2011/04/10/expandable-listview-in-android-using-simpleexpandablelistadapter-a-simple-example/

„to znaczy, że muszę stworzyć dwa układ dla grupy i widok dziecka?”

Oczywiście, tak! Chodzi mi o to, że możesz nie tworzyć układów, ale to znowu twój wybór, a to ma niewiele wspólnego z ExpandableList

Lista GrupList najlepiej zawierałaby listę zespołów List = {"Zespół programistów", "Dane Zespół proces "} (ten będzie wykorzystywany głównie do celów wyświetlania tylko jak obliczaniu wysokości notować etc.)

liścieelementów podrzędnych idealnie będzie zawierać listę list (HashMap list raczej)

HashMap> =

Zespół programistów: Lista = {"Jan", "Bill"} Data Process Team: Lista = {"John", "Bill"}

0

Potrzebne będą dwie listy lub tablice.

nadrzędna (Dev. Zespołu i zespół Process danych)

Lista rodzic jest regularny jeden, trzeba będzie dodać wszystkie rodziców tj elementów najwyższego poziomu.

Childrean

Główną różnicą między dominującą i dzieci listy, jest to, że lista dzieci jest lista list.

Tak na przykład, jeśli chcesz dzieci rodzica można zrobić coś takiego

children.get(parentPosition) 

A jeśli potrzebujesz konkretnego dziecka

children.get(parentPosition).get(childPosition) 

Here można znaleźć przykład używając BaseExpandableListAdapter

+0

'Lista rodzic jest regularny jeden, trzeba będzie dodać wszystkie rodziców tj najwyższym poziomie items'. Zastanawiam się po prostu, dlaczego lista map? Dlaczego nie używać listy ciągów? Na przykład: 'groups = new ArrayList (); groups.add (" group1 ")?' – hguser

+0

Jeśli rozszerzasz 'BaseExpandableListAdapter', możesz użyć' ArrayList' dowolnego typu obiektu. Nie rozumiem powodu, dla którego twórcy Androida używają 'Mapy' na' SimpleExpandableListAdapter' – Axxiss

+0

Czy pierwszym 'children.get (parentPosition)' powinien być 'parent.get (parentPosition)'? – hguser

Powiązane problemy