2011-03-04 5 views
0

Est-ce que quelqu'un pourrait indiquer un exemple de travail d'une boîte de dialogue personnalisée qui prend un ArrayAdapter en entrée et affiche une liste sélectionnable.Boîte de dialogue Liste personnalisée Android

J'ai essayé de créer un dialogue à l'aide d'un constructeur AlertDialog en tant que tel ...

final ArrayAdapter<MyObject> myAdapter = getMyobjects(); 
      final AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle("Pick an item").setAdapter(myAdapter, 
        new android.content.DialogInterface.OnClickListener() { 
         public void onClick(final DialogInterface dialog, final int item) { 
          Toast.makeText(Islands.this, myAdapter.getItem(item).toString(), Toast.LENGTH_SHORT).show();  
         } 
        }); 
      final AlertDialog alert = builder.create(); 
      return alert; 

Mon problème est que ma boîte de dialogue est pas mis à jour alors j'appelle

@Override 
protected void onPrepareDialog(final int id, final Dialog dialog) { 
    switch (id) { 
     case DIALOG_GET_AVAIL_DESTS: 
     ((AlertDialog) dialog).getListView().setAdapter(getDestinations()); 
     break; 
    } 
} 

Cependant l'auditeur onClick écoute l'ensemble initial d'éléments ...

Répondre

0

En effet AlertDialog implémente le motif de conception de façade avec cette classe derrière: Et le code entier est un tel bordel ... J'ai pris 3 heures pour essayer de faire cela, et je vais construire une boîte de dialogue à partir de zéro, en utilisant android.R.layout comme base.

Steff

0

Vous devez faire un appel à

invalidateViews()

sur votre listview - qui causeront à redessiner la vue avec les mises à jour.

0

Étant donné que vous utilisez onPrepareDialog(int id, Dialog dialog), je suppose que vous configurez initialement la boîte de dialogue dans onCreateDialog(int id). Cela permet au système d'enregistrer la boîte de dialogue que vous avez créée au préalable. Pour obtenir la fonctionnalité souhaitée, lorsque le dialogue est rejeté, dites au système de le supprimer en appelant le android.app.Activity.removeDialog(int id).

Toutes les invocations suivantes verront votre boîte de dialogue régénérée via la méthode onCreateDialog(int id), entraînant la mise à jour de l'ensemble d'éléments.

Questions connexes