2010-01-25 17 views
5

Mam widżet pokrętła w mojej aktywności, który pozwala użytkownikom wybrać nazwę listy.Jak wyskakować listę jak spinner bez spinner w Androidzie?

Zwykle funkcją przędzarki jest przełączanie między listami, ale w przypadku kilku wystąpień wymieniam się detektorem zmian wyboru w celu wykonania innej funkcji z tą samą listą opcji. Po dokonaniu selekcji stary słuchacz zostaje przywrócony i życie toczy się dalej.

To jest zły i buggy układ. Zamiast tego chciałbym mieć funkcję, która po prostu bierze odbiornik wyboru i kilka innych parametrów i pokazuje listę podręczną, która jest zapełniona tym samym kursorem (lub identycznym kursorem), jak spinner, bez użycia samej przędzarki.

Czy mogę to zrobić?

Odpowiedz

9

Użyj AlertDialog.Builder i podaj Adapter przez setAdapter(), który generuje twoje wiersze.

W twoim przypadku, nie będę korzystać z tego samego Cursor, jako Cursor ma istotną pojęcie bieżącego wiersza, a więc brudząc z Cursor gdy jest używane przez SpinnerAdapter mogłyby zepsuć Spinner. Idź z identycznym Cursor.

+0

nie miałem pojęcia AlertDialog.Builder miał tę funkcjonalność. Dzięki za wskazówkę. Przyjmuję twoją odpowiedź, jeśli ją wymyślę. – CodeFusionMobile

10

Jest najlepszym przykładem szczegółów popup jak obrotówki korzystających AlertDialog i AlertDialog.Builder

 AlertDialog dialog; 

     final CharSequence[] items = { "Item1", "Item2" }; 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(title); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int pos) { 
      switch (pos) { 
       case 0: 
           { 
     Toast.makeText(this,"Clicked on:"+items[pos],Toast.LENGTH_SHORT).show(); 

         }break; 
      case 1: 
           { 
     Toast.makeText(this,"Clicked on:"+items[pos],Toast.LENGTH_SHORT).show(); 

         }break; 
     } 
    }}); 
dialog=builder.create(); 
dialog.show(); 
+0

niesamowite! Dokładnie to, czego potrzebowałem. – Jesse

3

Jeśli nie jesteś ograniczony przez poziom API 11 następnie listPopupWindow jest blisko tego, co chcesz.

+0

powinno to być bardziej popularne wśród odpowiedzi. – guness

1
  CharSequence[] items = {"Mangoes", "Bananas", "Grapes"}; 

      new AlertDialog.Builder(getActivity()) 
      .setTitle("Action") 
      .setItems(items, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int item) { 

        if(item==0){ 
         // Mangoes selected 
        } 
        else if(item==1){ 
         // Bananas selected 
        } 
        else if(item==2){ 
         // Grapes selected 
        } 
       } 

      }) 
      .show();