0

我有一个从枚举填充的微调器:

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;
    }...

我敢肯定,我让这件事变得比实际更难!我会很感激任何想法。

4

1 回答 1

1

那么基本上枚举类型有它的关联间隔。所以不需要开启区间,开启枚举类型即可:

Object obj = newAlarmFreqSpinner.getSelectedItem();
switch((Frequencies)obj) {
case Frequencies.EVERYDAY {
    alarm.setInterval(EVERYDAY.getIntervalInSecs());
    break;
}...
于 2012-05-24T11:46:39.107 回答