динамическое алертиалдиалог с переключателями - PullRequest
8 голосов
/ 29 января 2010

Я пытаюсь сделать список элементов динамическим, чтобы я мог добавить его во время выполнения, но понятия не имею. CharSeqence не является динамическим, и не знаю, как использовать параметр адаптера, как я могу изменить свой код, чтобы быть динамическим?

private void alertDialogLoadFile() {

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Choose:");  
    CharSequence[] items = { "moshe", "yosi", "ee" };
    alert.setSingleChoiceItems(m_items , -1, new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int item){
            /* User clicked on a radio button do some stuff */
        }
    });

    alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int id) {
    }
    });

    alert.setNegativeButton("No", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });


    AlertDialog ad = alert.create();
    ad.show();

}

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

, если вы используете строитель, попробуйте это:

ArrayAdapter<CharSequence> itensAdapter = new ArrayAdapter<CharSequence>();
itensAdapter.add("whatever");

builder = new AlertDialog.Builder(CalculatorActivity.this);
builder.setTitle("Escolha uma opção");
builder.setAdapter(itensAdapter, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
                removeDialog(DIALOG_AREA);
        }
    });
dialog = builder.create();
2 голосов
/ 29 января 2010

Если вы создаете диалоговое окно в onCreateDialog(), вы можете реализовать onPrepareDialog(), чтобы изменить варианты перед его отображением для пользователя. Например:

protected void onPrepareDialog(int id, Dialog dialog) {    
    if (id == YOUR_DIALOG_ID) {

        // Create new adapter
        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>();
        adapter.add("new items ...");
        ...

        // Use the new adapter
        AlertDialog alert = (AlertDialog) dialog;
        alert.getListView().setAdapter(adapter);
    }
}

Вы также можете получить тот же эффект, вынув адаптер из диалогового окна (и приведя его к правильному типу) и добавив или удалив элементы по своему усмотрению. Я бы, вероятно, склонялся к простому созданию нового адаптера, потому что вам не придется беспокоиться о преобразовании значения из getListAdapter() в неправильный тип. Тем не менее, повторное использование адаптера, вероятно, немного более эффективно использует память.

1 голос
/ 10 ноября 2010
@Override
protected void onPrepareDialog(int id, Dialog dialog) {

    super.onPrepareDialog(id, dialog);

    if (id == DIALOG_PHONE_SELECT) {

        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(CallBack.this, android.R.layout.select_dialog_item, availablePhones);
        ((AlertDialog) dialog).getListView().setAdapter(adapter);

    }
}

Вы можете использовать «android.R.layout.select_dialog_item» - диалог без кнопки «ОК» или «android.R.layout.select_dialog_singlechoice» с кнопкой «ОК»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...