2010-06-11 2 views
5

В моем приложении я вызываю контекстное меню с длинным щелчком в ListActivity. Один из вариантов «Приоритет» выдает AlertDialog с тремя выборами переключателей. Проблема заключается в том, что он отображает пустое диалоговое окно без моих 3 вариантов или сообщение, которое я установил. Вот мой код ..Android AlertDialog не показывает радиокнопки или сообщение

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

Если я заменить .setSingleChoiceItems с положительной и отрицательной кнопки вместо этого, он отображает кнопки и сообщение, как ожидалось. Что я делаю неправильно при настройке списка переключателей? Вот мой код вызова, а также.

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

ответ

22

Понял! Я использовал builder.setMessage в диалоговом окне singleChoiceItem вместо builder.setTitle. Похоже, что диалоги с использованием выбора переключателей не поддерживают установку сообщения, а только заголовок. Кажется странным, что метод предоставляется. Во всяком случае, вот рабочий код.

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

Спасибо! Я просто ударил головой о стену в течение часа, пытаясь понять, почему мой предупреждающий диалог продолжал пустым. – seanalltogether

+0

Большое спасибо. это безумие. и это может быть документировано где-то. – njzk2

+0

Цистерны! Я безумно искал эту ошибку! –

Смежные вопросы