2010-01-25 7 views
5

J'ai un widget spinner dans mon activité qui permet aux utilisateurs de choisir un nom de liste.Comment faire une liste popup comme un fileur sans fileur dans Android?

Normalement, la fonction du compteur est de basculer entre les listes, mais pour quelques cas, j'échange l'écouteur de changement de sélection pour effectuer une fonction différente avec la même liste d'options. Une fois la sélection effectuée, l'ancien auditeur est restauré et la vie continue.

Ceci est un mauvais arrangement et buggy. Au lieu de cela, je voudrais avoir une fonction qui prend juste un écouteur de sélection et d'autres paramètres et montre une liste déroulante qui est peuplée par le même curseur (ou et curseur identique) que le spinner, sans utiliser le spinner lui-même.

Y at-il un moyen de le faire?

Répondre

9

Utilisez AlertDialog.Builder et fournissez un Adapter via setAdapter() qui génère vos lignes.

Dans votre cas, je ne voudrais pas utiliser le même Cursor, comme Cursor a une notion intrinsèque de la ligne actuelle, et ainsi de déconner avec le Cursor alors qu'il est utilisé par votre SpinnerAdapter pourrait bousiller la Spinner. Aller avec un Cursor identique.

+0

Je ne savais pas un AlertDialog.Builder avait cette fonctionnalité. Merci pour le conseil. J'accepterai votre réponse si je la fais fonctionner. – CodeFusionMobile

10

C'est le meilleur exemple pour les pop-ups comme spinner en utilisant AlertDialog et 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

génial! Juste ce dont j'avais besoin. – Jesse

3

Si vous n'êtes pas limité par le niveau de l'API 11 alors listPopupWindow est proche de ce que vous voulez.

+0

cela devrait être plus populaire parmi les réponses. – 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();