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