2010-01-29 138 views
8

我想使项目列表动态,所以我可以在运行时添加到它,但我不知道。 CharSeqence不是动态的,也不知道如何使用适配器选项,我怎么能改变我的代码是动态的?动态alertdialog单选按钮

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

} 
+0

你是什么意思动态?你想在运行时让选项变化吗?谁在决定什么是选择? – 2010-01-29 18:41:08

+0

我希望它们能够在运行时创建,就像那些选择正在从某个数据库中恢复,因此您无法选择哪些项目将在警报对话框中。 – rayman 2010-01-30 15:52:11

回答

1

如果创建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()的值转换为错误的类型。但是,重新使用适配器可能会提高内存的效率。

+0

ArrayAdapter adapter = new ArrayAdapter (); 你不能用这种方式,没有defualt的构造函数。 – rayman 2010-01-30 15:51:11

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” - 如果你用的是Builder对话框中没有OK键或 “android.R.layout.select_dialog_singlechoice” 与OK按钮

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

ArrayAdapter没有默认的构造函数,所以它应该是这样的:ArrayAdapter itensAdapter = new ArrayAdapter (this,R.layout.list); – EtienneSky 2012-06-20 06:05:16