2010-06-11 23 views
5

En mi aplicación, menciono un menú contextual al hacer clic largo en una actividad de lista. Una de las opciones "Prioridad" muestra un AlertDialog con 3 opciones de botón de opción. El problema es que muestra un cuadro de diálogo vacío sin mis 3 opciones o el mensaje que establecí. Aquí está mi código ..Android AlertDialog que no muestra botones de opción o mensaje

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 sustituyo las .setSingleChoiceItems con un botón positivo y negativo en vez, muestra los botones y el mensaje como se esperaba. ¿Qué estoy haciendo mal al configurar mi lista de botones de radio? Aquí está mi código de llamada también ..

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

Respuesta

22

¡Lo encontré! Estaba usando builder.setMessage en un cuadro de diálogo singleChoiceItem en lugar de builder.setTitle. Parece que los diálogos que utilizan opciones de botón de opción no admiten la configuración de un mensaje, solo un título. Parece extraño que el método esté provisto sin embargo. De todos modos, aquí está el código de trabajo ...

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

¡Gracias! Solo me golpeé la cabeza contra la pared durante una hora tratando de descubrir por qué mi diálogo de alerta seguía apareciendo vacío. – seanalltogether

+0

Muchas gracias. Esto es Loco. y esto podría ser documentado en alguna parte. – njzk2

+0

Tanques! ¡Me volví loco buscando este error! –

Cuestiones relacionadas