1
我有一個簡單的AlertDialog與兩個元素的setSingleChoiceItems列表工作正常。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使用枚舉,而無需手動轉換爲字符串/ CharSequence的一種優雅的方式?例如,如果我稍後決定只在枚舉中將「WHITE」更改爲「GREEN」,則它也應該自動顯示在警報對話框中。
有所幫助,謝謝。 (我必須用「Player []」和「size」替換爲「Collection」)。這給了我一個字符串數組,我可以輸入到對話框中。 –
user1583209
不過我並不完全開心,因爲當選擇singleChoiceItem時,我基本上會得到一個字符串,我必須將其與通過toString()轉換的枚舉元素進行比較。我不喜歡的是我比較字符串而不是基礎的枚舉元素。基本上我想要的是我將Player.values()提供給setSingleChoiceItems,它使用toString()進行顯示,但是在onClick方法中,「Object checkedItem = lw.getAdapter()。getItem(lw.getCheckedItemPosition()) ;」是Player類型,而不是String類型。這可能嗎? – user1583209
是的,現在我糾正了......您可以使用方法''Player.valueOf()''來轉換字符串表示的枚舉中的字符串。例如''Player.valueOf(「WHITE」)''應該返回Player.WHITE(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#valueOf(java。 lang.Class,%20java.lang.String))。 – optimusfrenk