Android 带有单选按钮的动态警报对话框

Android 带有单选按钮的动态警报对话框,android,Android,我试图使项目列表动态化,以便在运行时添加到项目列表中,但我不知道。charsequence不是动态的,而且不知道如何使用适配器选项,我如何才能将代码更改为动态的 private void alertDialogLoadFile() { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Choose:"); CharSequence[] items = { "moshe

我试图使项目列表动态化,以便在运行时添加到项目列表中,但我不知道。charsequence不是动态的,而且不知道如何使用适配器选项,我如何才能将代码更改为动态的

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

}

如果在
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);
    }
}
受保护的void onPrepareDialog(int-id,Dialog){
if(id==您的对话框id){
//创建新适配器
ArrayAdapter=新的ArrayAdapter();
适配器。添加(“新项目…”);
...
//使用新适配器
AlertDialog alert=(AlertDialog)对话框;
alert.getListView().setAdapter(适配器);
}
}
您还可以通过从对话框中获取适配器(并将其转换为正确的类型)并添加或删除您认为合适的项来获得相同的效果。我可能倾向于简单地创建一个新适配器,因为您不必担心将
getListAdapter()
中的值强制转换为错误的类型。但是,重用适配器可能会提高内存效率。

@Override
@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);

    }
}
受保护的void onPrepareDialog(int id,对话框){ super.onPrepareDialog(id,对话框); 如果(id==对话框\电话\选择){ ArrayAdapter=新的ArrayAdapter(CallBack.this,android.R.layout.select_dialog_项,availablePhones); ((AlertDialog)dialog.getListView().setAdapter(适配器); } }

您可以使用“android.R.layout.select_dialog_item”-不带OK按钮的对话框,或使用OK按钮的“android.R.layout.select_dialog_singlechoice”(android.R.layout.select_dialog_singlechoice)如果您使用的是生成器,请尝试以下操作:

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();
ArrayAdapter itensAdapter=new ArrayAdapter();
itensAdapter.添加(“任何”);
builder=新建AlertDialog.builder(CalculatorActivity.this);
建筑商名称(“Escolha uma opço”);
setAdapter(itensAdapter,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
移除对话(对话区);
}
});
dialog=builder.create();

动态是什么意思?您想让选项在运行时是可变的吗?谁在决定这些选项是什么?我希望在运行时创建它们,就像从某个数据库检索这些选项一样,因此您无法选择之前将在警报对话框中显示哪些项。ArrayAdapter=new ArrayAdapter();您不能以这种方式使用它,因为没有可撤销的构造函数。ArrayAdapter没有默认构造函数,因此它应该类似于:ArrayAdapter itensAdapter=new ArrayAdapter(this,R.layout.list);