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