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;
}...
我確定我會讓這個難度超過它!我會很感激任何想法。
感謝您的回答。它促使我考慮是否可以從微調器獲取Frequency對象,並且頻率對象知道它自己的間隔,我根本不需要切換,只需要獲取間隔:'long interval =((Frequencies)newAlarmFreqSpinner.getSelectedItem ())getIntervalInSecs();' – barry
高興你設法打破它。 – zeratul021