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

    在上一讲中,我们介绍了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. 程序执行结果:
【Android 开发】:UI控件之 AlertDialog 对话框控件的的使用(二)_第1张图片                       【Android 开发】:UI控件之 AlertDialog 对话框控件的的使用(二)_第2张图片

注意:其中有一个重载的方法如下,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;
                            }
                        });

你可能感兴趣的:(android,UI,布局,控件,对话框)