来自枚举的AlertDialog Builder setSingleChoiceItems

时间:2016-02-27 04:02:11

标签: android listview enums android-alertdialog

我有一个简单的AlertDialog,带有两个元素的setSingleChoiceItems列表,工作正常。

final CharSequence[] blackwhite = {"White", "Black"};

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);


    alertDialogBuilder.setTitle("Title");
    alertDialogBuilder
            .setCancelable(false)
            .setSingleChoiceItems(blackwhite, -1,null)
            .setPositiveButton("Start", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    ListView lw = ((AlertDialog) dialog).getListView();
                    Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());

                     // Do something with checkedItem
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();

在其余代码中,这两个项实际上对应于枚举:

public enum Player {
    WHITE, BLACK
}

是否有一种优雅的方式直接在setSingleChoiceItems中使用枚举而无需手动转换为String / CharSequence?例如,如果我后来决定仅在枚举中将“WHITE”更改为“GREEN”,则它也会自动显示在警告对话框中。

1 个答案:

答案 0 :(得分:5)

您可以使用Player方法获取toString()的字符串值。

Player.WHITE.toString(); // returns "WHITE"

您可以执行以下操作:

public enum Player {

  WHITE, BLACK, GREEN, PURPLE

  public static String[] getValues() {
    String[] strs = new String[Player.values().length];
    int i = 0;

    for (Player p: all)
      strs[i++] = p.toString().toLowerCase();

    return strs; // ["white", "black", "green", "purple"]
  }
}

我希望它有所帮助!