来自枚举的 AlertDialog Builder setSingleChoiceItems
AlertDialog Builder setSingleChoiceItems from enum
我有一个简单的 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",这也应该自动显示在警报对话框中。
您可以使用 toString()
方法获取 Player
的字符串值。
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"]
}
}
希望对您有所帮助!
我有一个简单的 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",这也应该自动显示在警报对话框中。
您可以使用 toString()
方法获取 Player
的字符串值。
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"]
}
}
希望对您有所帮助!