使用列表<>填充builder.setItem

时间:2012-09-04 16:59:56

标签: android list alertdialog builder

我尝试使用Builder构建AlertDialog。我的对话框必须有多个选项供用户选择。我在android开发者网站上发现我可以使用builder.setItems(int,DialogInterface.onClickListener)。我的问题是我试图传递一个List地址而不是int。我希望用户从地址列表中选择一个选项。这是我的插图代码:

    private List<Address> addresses;

    protected void updateMap() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick an Address");

    builder.setItems(addresses, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int choosenAddress) {

            //address = addresses.get(choosenAddress); //choose result from the array

        }
    });

在builder.setItems ..中得到一个错误,说这个参数没有列表。

2 个答案:

答案 0 :(得分:2)

SetItems将Charsequence数组作为参数,因此您必须将List<Address>转换为List<String>,然后使用list.toarray()

答案 1 :(得分:1)

nandeesh 的回答的扩展

String [] addressStrings = new String [addresses.size()];

for(int i=0; i<addresses.size(); i++)
    addressStrings[i] = addresses.get(i).toString();

您需要覆盖toString()类的Address方法,以便为String个对象创建有意义的Address表示。

现在在onClick()方法中,您仍然可以通过给定索引访问Address对象,因为addresses列表和addressStrings的大小和元素顺序数组是一样的。

Address selected = addresses.get(choosenAddress);