2010-06-11 6 views
5

Dans mon application, j'appelle un menu contextuel sur un clic long dans une ListActivity. L'une des options "Priorité" affiche un AlertDialog avec 3 choix de bouton radio. Le problème est, il affiche une boîte de dialogue vide sans mes 3 choix, ou le message que j'ai défini. Voici mon code ..Android AlertDialog ne pas afficher les boutons radio ou le message

protected Dialog onCreateDialog(int id) { 
    AlertDialog dialog; 
    switch(id) { 
    case DIALOG_SAB_PRIORITY_ID: 
     final CharSequence[] items = {"High", "Normal", "Low"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this); 
     builder.setMessage("Select new priority") 
       .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     dialog = builder.create();    
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 

Si je remplace les .setSingleChoiceItems avec un bouton positif et négatif à la place, il affiche les boutons et le message comme prévu. Qu'est-ce que je fais de mal dans la configuration de ma liste de boutons radio? Voici mon code d'appel aussi.

public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.sabdelete: 
     // Correct position (-1) for 1 header 
     final SabQueueItem qItem = (SabQueueItem) itla.getItem(info.position-1); 
     SabNZBdUtils.deleteItem(qItem.getNzo_id()); 
     getQueue(); 
     ListView lv = getListView(); 
     View v = lv.findViewById(R.id.sablistheader); 
     setHeader(v); 
     itla.notifyDataSetChanged(); 
     return true; 
    case R.id.sabpriority: 
     showDialog(DIALOG_SAB_PRIORITY_ID); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

Répondre

22

Compris! J'utilisais builder.setMessage dans une boîte de dialogue singleChoiceItem au lieu de builder.setTitle. Il semble que les boîtes de dialogue utilisant le choix des boutons radio ne prennent pas en charge la définition d'un message, seulement un titre. Cela semble étrange que la méthode soit fournie cependant. Quoi qu'il en soit, voici le code de travail ..

protected Dialog onCreateDialog(int id) { 
    AlertDialog dialog; 
    switch(id) { 
    case DIALOG_SAB_PRIORITY_ID: 
     final CharSequence[] items = {"High", "Normal", "Low"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this); 
     builder.setTitle("Select new priority") 
       .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     dialog = builder.create(); 
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
+2

Merci! Je me suis cogné la tête contre le mur pendant une heure en essayant de comprendre pourquoi ma boîte de dialogue d'alerte revenait vide. – seanalltogether

+0

Merci beaucoup. c'est fou. et cela pourrait être documenté quelque part. – njzk2

+0

Réservoirs! Je suis devenu fou à la recherche de ce bug! –

Questions connexes