2011-08-24 58 views
14

我正在尋找使用枚舉來獲取android上的微調控件的列表。我有我的枚舉設置如下:將枚舉添加到Android的微控制器陣列適配器中

public enum States{ 

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"), 
    ... (etc.) 
} 

我現在的陣列適配器的設置如下:

mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values())); 

這幾乎工作,但在我的微調列表我最終的縮寫,而不是州名(這是我要去的)。有沒有一種解決方法來正確獲取此設置?

回答

33

我希望這可以幫助別人。我花了一段時間才弄清楚自己。訣竅是在你的枚舉中重寫toString。您的狀態枚舉的代碼是:

public enum States{ 
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"), 
    ... (etc.); 

    private String theState; 

    States(String aState) { 
    theState = aState; 
    } 

    @Override public String toString() { 
    return theState; 
    } 
} 

然後,創建適配器就像你做的:

mAddressState.setAdapter(new ArrayAdapter<States>(this, 
     android.R.layout.simple_list_item_1, States.values())); 

和長名稱將在微調中顯示。要從適配器獲取縮寫名稱,例如要存儲選定的縮寫名稱,請使用enum.name()函數。例如:

Spinner spinner = (Spinner) myView.findViewById(R.id.theState); 
String selected = ((States)spinner.getSelectedItem()).name(); 
0

添加一個枚舉的構造是這樣的...然後更換States.values()與States.fullName()

public enum States{ 

    AL("Alabama"), 
    AK("Alaska"), 
    ... (etc.) 

    private String fullName; 

    States(String fullName) { 
     this.fullName = fullName; 
    } 

    public String fullName() { return fullName; } 
} 
+0

這沒有奏效。我實際上已經這樣做了,並沒有指定,對不起。陣列適配器似乎並不喜歡我試圖做到這一點。 mAddressState.setAdapter(新ArrayAdapter (此,android.R.layout.simple_list_item_1,States.getStateName())); 我也嘗試了數組適配器類型設置爲 新ArrayAdapter 還是沒做什麼,我是後。任何其他建議? – RyanInBinary

0

,也許你可以嘗試重寫的toString()函數如下所示here。我還沒有嘗試過,但我正要做。