您的位置:首页 > 产品设计 > UI/UE

【Android 开发】:UI控件之 AlertDialog 对话框控件的的使用(二)

2013-08-07 19:13 701 查看
    在上一讲中,我们介绍了Android中对话框的简单使用:【Android 开发】:UI控件之 AlertDialog 对话框控件的的使用(一),这一讲,我们继续来讲解一下对话框的其他使用方式,主要是添加单选或者多选的列表选项。

    创建一个多选或者单选列表在对话框中,就必须使用 setMultiChoiceItems() 和 setSingleChoiceItems() 方法,如果需要创建它,就调用onCreateDialog()方法即可,注意,如果用户离开或者暂停这个Acivity的时候,就会保存用户的信息。也就是说警告框不仅是警告的作用,也会存储用户信息的作用。

1.  单选按钮的实现

    查看API文档 setSingleChoiceItems(),可以发现这个方法的重载。

    public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)

   [可以用列表选项做为对话框的内容]

参数说明
items:      参数需要显示的选项
checkedItem:参数指定哪一个选项被选中,如果是-1表示没有选项被选中
listener:   参数表示其监听的事件

    public AlertDialog.Builder setSingleChoiceItems (ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener)

   [可以使用适配器,这种方式特别适合用来获得网络的一些数据]
    public AlertDialog.Builder setSingleChoiceItems (int itemsId, int checkedItem, DialogInterface.OnClickListener listener)

   [可以从资源文件中去获取一些选项的操作]
    public AlertDialog.Builder setSingleChoiceItems (Cursor cursor, int checkedItem, String labelColumn, DialogInterface.OnClickListener listener)

   [可以使用游标,也就是从数据库中去提取用户需要选择的一些信息]

2. 复选按钮的实现

   复选按钮的操作,查看API文档 中的setMultiChoiceItems()方法,同样可以发现有多个重载的方法,这里就不贴出来了。
   public AlertDialog.Builder setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)

参数说明:
items:       参数表示需要显示的选项。
checkedItems:参数表示指定哪一个选项默认是被选中的,如果设置为null,表示没有选项被选中,如果不为null,则这个数组的长度和选项内容 的长度是一样的。
listener:    参数是监听事件

3. 程序代码如下:
public class MainActivity extends Activity {

private Button button1;
private Button button2;
private final CharSequence[] items = {
"上海", "北京", "广州"
};
private final boolean[] citySelected = new boolean[]{false, true, false};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initComponent();
button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("请选择单选按钮");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
CharSequence select_item = items[which];
Toast.makeText(MainActivity.this, "-->" + select_item, 1).show();
dialog.dismiss(); //对话框消失
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
});

button2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("请选择多选按钮");
//第二个参数尅设置为null,表示没有选项默认被选中
builder.setMultiChoiceItems(items, citySelected,
new OnMultiChoiceClickListener() {

@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
citySelected[which] = isChecked;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//使用StringBuffer或者使用StringBuilder追加,中间用逗号隔开直接获取Dialog的选中的值。
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < citySelected.length; i++ ) {
if(citySelected[i] == true) {
stringBuilder.append(items[i] + ",");
}
}
Toast.makeText(MainActivity.this, stringBuilder.toString(), 1).show();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

private void initComponent() {
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
}

}


4. 程序执行结果:


                      


注意:其中有一个重载的方法如下,itemsId 用来表示从资源文件中获取

public AlertDialog.Builder setMultiChoiceItems (int itemsId, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)

其中第一个参数itemsId  

itemsId: the resource id of an array i.e. R.array.foo 定义数组资源的文件

所以上述程序也可以这样修改使用也是可以的:

1). 在values文件夹下建立数组资源文件 arrays.xml 如下所示:
<resources>
<string-array name="city">
<item>北京</item>
<item>上海</item>
<item>广州</item>
</string-array>
</resources>

2). 修改程序代码段
builder.setMultiChoiceItems(R.array.city, citySelected,
new OnMultiChoiceClickListener() {

@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
citySelected[which] = isChecked;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐