2010-06-11 12 views
5

Nella mia app faccio apparire un menu contestuale sul clic lungo in un ListActivity. Una delle opzioni "Priorità" visualizza un AlertDialog con 3 scelte di pulsanti di opzione. Il problema è che visualizza una finestra di dialogo vuota senza le mie 3 scelte o il messaggio che ho impostato. Ecco il mio codice ..Android AlertDialog non mostra pulsanti radio o messaggio

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; 
} 

Se sostituisco i .setSingleChoiceItems con un pulsante positivo e negativo, invece, visualizza i pulsanti e il messaggio come previsto. Cosa sto sbagliando nell'impostare il mio elenco di pulsanti di opzione? Ecco il mio codice di chiamata pure ..

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); 
    } 
} 

risposta

22

Capito! Stavo usando builder.setMessage su una finestra di dialogo singleChoiceItem invece di builder.setTitle. Sembra che le finestre di dialogo che utilizzano le scelte dei pulsanti di opzione non supportino l'impostazione di un messaggio, ma solo un titolo. Sembra strano che il metodo sia comunque fornito. Comunque, ecco il codice funzionante ..

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

Grazie! Ho appena sbattuto la testa contro il muro per un'ora cercando di capire perché la mia finestra di avviso continuava a svuotarsi. – seanalltogether

+0

Grazie mille. questo è pazzesco. e questo potrebbe essere documentato da qualche parte. – njzk2

+0

Serbatoi! Sono diventato pazzo alla ricerca di questo bug! –