2012-05-24 89 views
0

我是從一個枚舉填充的微調:從Android的微調選擇的項目,使用它

public enum Frequencies 
    { 
    EVERYDAY("Every day"), EVERYOTHERDAY("Every second day"); 

    private String friendlyName; 

    private Frequencies(String friendlyName) 
    { 
     this.friendlyName = friendlyName; 
    } 

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

toString()覆蓋意味着微調顯示用戶友好的名稱。

的微調填充像這樣:

 ArrayAdapter<Frequencies> adapter = new ArrayAdapter<Frequencies>(this, android.R.layout.simple_spinner_item, 
      Frequencies.values()); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    newAlarmFreqSpinner.setAdapter(adapter); 

所有這一切都運作良好。當用戶從旋轉器選擇的頻率,我想使用的值以設置一個long值來表示在一個簡單的Alarm對象的警報之間的間隔。所以「每一天」的價值將是一天中的秒數。

不過,我不能完全得到我圍繞着如何很好地處理頻率對象,我從噴絲頭檢索。我最初的想法是使用一個switch語句上所顯示的串開關,確定long值我需要,但當然你不能switch在一根繩子上。

我又試圖修改頻率枚舉所以每個條目存儲在其自身的長期價值:

EVERYDAY("Every day", 86400), EVERYOTHERDAY("Every second day", 86400 * 2); 

private String friendlyName; 
public final int intervalInSecs; 

private Frequencies(String friendlyName, int intervalInSecs) 
{ 
    this.friendlyName = friendlyName; 
    this.intervalInSecs = intervalInSecs; 
}... 

但隨後的開關抱怨說,「CASE表達式必須是常量表達式」(儘管我做了intervalInSecs final) :

Object obj = newAlarmFreqSpinner.getSelectedItem(); 
    switch(((Frequencies)obj).getIntervalInSecs()) 
{ 
    case Frequencies.EVERYDAY.intervalInSecs: //Java doesn't like this 
    { 

     break; 
    }... 

我確定我會讓這個難度超過它!我會很感激任何想法。

回答

1

嗯,基本上枚舉類型都有它的關聯間隔。所以你不需要打開間隔,只需打開枚舉類型:

Object obj = newAlarmFreqSpinner.getSelectedItem(); 
switch((Frequencies)obj) { 
case Frequencies.EVERYDAY { 
    alarm.setInterval(EVERYDAY.getIntervalInSecs()); 
    break; 
}... 
+0

感謝您的回答。它促使我考慮是否可以從微調器獲取Frequency對象,並且頻率對象知道它自己的間隔,我根本不需要切換,只需要獲取間隔:'long interval =((Frequencies)newAlarmFreqSpinner.getSelectedItem ())getIntervalInSecs();' – barry

+0

高興你設法打破它。 – zeratul021

相關問題