2012-05-24 29 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

相关问题