2010-06-11 5 views
5

In meiner App bringe ich ein Kontextmenü auf lange klicken in einer ListActivity. Eine der Optionen "Priorität" öffnet einen AlertDialog mit 3 Auswahlmöglichkeiten. Das Problem ist, dass es ein leeres Dialogfeld ohne meine 3 Auswahlmöglichkeiten oder die von mir eingestellte Nachricht anzeigt. Hier ist mein Code ..Android AlertDialog zeigt keine Radioknöpfe oder Nachrichten

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

Wenn ich die .setSingleChoiceItems mit einer positiven und negativen Taste statt ersetzen, es zeigt die Tasten und die Nachricht wie erwartet. Was mache ich falsch beim Einrichten meiner Liste von Optionsfeldern? Hier ist auch meine Telefonvorwahl.

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

Antwort

22

Ich habe es herausgefunden! Ich habe builder.setMessage in einem singleChoiceItem-Dialogfeld anstelle von builder.setTitle verwendet. Es scheint, dass Dialoge, die Optionsfelder verwenden, das Setzen einer Nachricht nicht unterstützen, sondern nur einen Titel. Es scheint seltsam, dass die Methode bereitgestellt wird. Wie auch immer, hier ist der Arbeitscode ..

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

Vielen Dank! Ich schlug eine Stunde lang mit dem Kopf gegen die Wand und versuchte herauszufinden, warum mein Alarmdialog immer leer war. – seanalltogether

+0

Vielen Dank. das ist verrückt. und das könnte irgendwo dokumentiert werden. – njzk2

+0

Tanks! Ich war verrückt nach diesem Käfer zu suchen! –