Android AlertDialog не показывает переключатели или сообщения - PullRequest
6 голосов
/ 11 июня 2010

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

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

1 Ответ

25 голосов
/ 11 июня 2010

Разобрался! Я использовал 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;
...