动态alertdialog与单选按钮

时间:2010-01-29 18:36:49

标签: android

我正在尝试使项目列表动态,所以我可以在运行时添加它,但我不知道。 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 个答案:

答案 0 :(得分:2)

如果您在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 :(得分:2)

如果您正在使用构建器,请尝试以下方法:

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 :(得分:1)

@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” - 没有OK按钮的对话框,或者使用OK按钮“android.R.layout.select_dialog_singlechoice”