2011-04-20 37 views
3

在我的應用程序中,我只需要一些具有良好名稱的全局值。 首先,我所做的就是將它們全部作爲「公共靜態最終」組件整合到一個單獨的類中。Android:我如何在交換機中使用res/integers.xml值?

然後我意識到我對全局字符串(將它們放到res/strings.xml中並使用它們通過getString(R.string.string_name))所做的操作也應該用整數。

不過,我第一次發現,有沒有這樣的東西作爲getInteger(R.integer.integer_name),但只有相當長的路:

Resources r = getResources(); 
int integer = getInteger(R.integer.integer_name); 

其次,當我嘗試在使用的值開關/表達式我只收到消息「case表達式必須是常量表達式」。

無論如何,使用res/integers.xml有什麼意義?我只是把我的整數回一些無用的類...

親切的問候, 水母

回答

2

因爲我們總是需要常量或枚舉開關/ case語句(< - ENUMS !!)在案件陳述。變量允許用於switch參數,但參數case不得更改。

所以,如果你需要「存儲」的情況下,參數和喜歡漂亮的名字,下降integers.xml(沒有解決你的問題),以及static final public int的 - 實現一個enum而不是全局值模型。


只是等待一些細節提出一個枚舉的解決方案;)在這裏,我們去:

public enum Value{ VALUE_ONE(300), VALUE_TWO(501), UNKNOWN(-1); 
    private int value; 
    private Value(int value) {this.value = value;} 

    public int getValue() { 
    return value; 
    } 

    public Value findValue(int value) { 
    for (Value v:values()) { 
     if (v.value == value) 
      return v; 
    } 
    return Value.UNKNOWN; 
} 

findValue可以用來得到一個數值枚舉,該UNKNOWN是返回一個替代null如果我們尋找一個未知的數字。玩得開心:)

+0

我以前曾經想過關於枚舉,但是我認爲它對我而言並不起作用。我需要確保例如VALUE_ONE = 300和VALUE_TWO = 502.另外,我確實得到了整數值(我無法改變),我必須與我的常量進行比較。開關/外殼似乎不允許這樣做(就像在C/C++中一樣)。但無論如何,integers.xml無法幫助我的答案足以回答。 :) – jellyfish 2011-04-20 09:32:23

0

實際上做的是在strings.xml或其他自定義xml文件中創建一組值,並給它們一個描述性名稱。這些值在編譯時會變成靜態的,每個xml值都是靜態的,然後我可以通過它們的id來引用它們。

所以在XML我做的:

<string name="descriptive_name_that_is_easily_read_in_switch_case"> 
        What I put here really doesn't matter</string> 

然後在開關/箱

switch(someValue){ 
    case R.id.descriptive_name_that_is_easily_read_in_switch_case:{ 
     <code> 
    } 
    break; 
} 

這樣做的好處是,我可以從代碼中刪除枚舉/靜態初始化了,使它更具可讀性,並且仍然在整個程序中重用這些值。

課程有些時候,您只希望您的枚舉/靜態值在某個類或方法中可見。那麼這不是你會做的。

相關問題