2016-02-27 85 views
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」,則它也應該自動顯示在警報對話框中。

回答

3

您可以使用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"] 
    } 
} 

我希望它能幫助!

+0

有所幫助,謝謝。 (我必須用「Player []」和「size」替換爲「Collection 」)。這給了我一個字符串數組,我可以輸入到對話框中。 – user1583209

+0

不過我並不完全開心,因爲當選擇singleChoiceItem時,我基本上會得到一個字符串,我必須將其與通過toString()轉換的枚舉元素進行比較。我不喜歡的是我比較字符串而不是基礎的枚舉元素。基本上我想要的是我將Player.values()提供給setSingleChoiceItems,它使用toString()進行顯示,但是在onClick方法中,「Object checkedItem = lw.getAdapter()。getItem(lw.getCheckedItemPosition()) ;」是Player類型,而不是String類型。這可能嗎? – user1583209

+0

是的,現在我糾正了......您可以使用方法''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