2011-07-10 19 views
13

W mojej aplikacji użytkownicy mogą wybierać artykuły do ​​pobrania przy użyciu różnych kryteriów. Jednym z nich jest rok i miesiąc. Do tego chciałbym AlertDialog z listą lat. Jeżeli użytkownik kliknie na rok, lista będzie rozwijać i pokazać, styczeń, luty itdCzy można utworzyć rozwijaną listę AlertDialog?

wiem jak zrobić rozszerzalny listview użyciu SimpleExpandableListAdapter ale to nie jest to, co chcę. Ponieważ pozostałe kryteria (np. Kategoria) są również na liście AlertDialogs, chcę czegoś podobnego w wyglądzie i odczuciu.

Czy można wykonać taką rozszerzalną listę AlertDialog?

ROZWIĄZANIE

To, co skończyło się w oparciu o rozwiązania CommonsWare za:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select something"); 

ExpandableListView myList = new ExpandableListView(this); 
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter(); 
myList.setAdapter(myAdapter); 

builder.setView(myList); 
AlertDialog dialog = builder.create(); 
dialog.show(); 

Jedynym problemem pozostały: w jaki sposób zaimplementować słuchacza onClick dla AlertDialog? Normalnie zrobiłbym to w metodzie setItems(), ale nie używam setItems.

Dodałem myList.setOnItemClickListener po myList.setAdapter(), ale jest on ignorowany. Nic się nie dzieje, gdy kliknę element:

myList.setOnItemClickListener(new ListView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int i, long l) { 
     try { 
      Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show(); 
     } 
     catch(Exception e) { 
      System.out.println("something wrong here "); 
     } 
    } 
}); 

rozwiązanie problemu kliknij:

Roztwór dość prosta. Ponieważ jest to lista rozwijana, kliknięcia elementów są przechwytywane przez samą listę, aby otworzyć elementy podrzędne. W związku z tym program obsługi zdarzeń nigdy nie jest wywoływany.

Zamiast tego należy zaimplementować OnChildClickListener(), która - jak sugeruje nazwa - nasłuchuje kliknięć podrzędnych!

Odpowiedz

9

Użyj setView() na AlertDialog.Builder, przechodząc w ExpandableListView, który nadmuchujesz lub utworzysz w kodzie Java i ustawiłeś adapter.

+0

Hmm, jestem całkiem nowy w systemie Android, ale spróbuję ... – marlar

+0

Pracowałem trochę nad tym i mam podstawowy pomysł, ale jak utworzyć listę? Normalnie utworzyłbym działanie i nadmuchałem je z xml, ale w tym przypadku nie będę pokazywał listview z wyjątkiem okna dialogowego. Więc w jakiś sposób muszę utworzyć rozwijany listview wewnątrz mojej głównej działalności i przekazać go za pomocą setView. Jak mogę to zrobić? Dzięki. – marlar

+0

@marlar: Przepełnij zasobem XML układu, który zawiera "ExpandableListView" lub utwórz przez Javę (np. Nowy ExpandableListView (this) '). – CommonsWare

1

Cóż, aby użyć listview, musisz rozszerzyć odpowiednią listę-aktywność, w twoim przypadku ExpandableListActivity. Nie można znaleźć ExpandableListDialog do rozszerzenia.

Przypuszczam, że możesz go zaimplementować w działaniu wywołującym okno dialogowe i przekazać widok listy do okna dialogowego jako odniesienie i ręcznie dodać do układu w oknie dialogowym. Nie jestem pewien, czy to zadziała, ale warto spróbować: D

0

można nawet dokonać android:theme="Theme.Dialog" w pliku manifestu na tej konkretnej działalności.

Powiązane problemy