我有一个从枚举填充的微调器:
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
语句来打开显示的字符串以确定我需要的长值,但当然你不能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;
}...
但是开关然后抱怨“案例表达式必须是常量表达式”(即使我已经做了intervalInSecs final
):
Object obj = newAlarmFreqSpinner.getSelectedItem();
switch(((Frequencies)obj).getIntervalInSecs())
{
case Frequencies.EVERYDAY.intervalInSecs: //Java doesn't like this
{
break;
}...
我敢肯定,我让这件事变得比实际更难!我会很感激任何想法。