2011-04-20 8 views
3

제 응용 프로그램에서 멋진 값으로 전역 값이 필요합니다. 첫 번째로, 내가 한 것은 "public static final"구성 요소를 모두 별도의 클래스에 넣는 것입니다.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); 
둘째

, 나는의 값을 사용하려고 switch/case expression 나는 "case expressions은 상수 표현이어야한다"라는 메시지 만 받는다.

어쨌든 res/integers.xml을 사용할 때 요점은 무엇입니까? (- 열거! <)에서 나는 ...

종류와 관련, 우리는 항상 상수 또는 열거 필요 스위치/케이스 표현에 대한 해파리

답변

2

일부 쓸모없는 클래스로 다시 내 정수를 넣어 막 해요 사례 진술. switch 매개 변수에는 변수를 사용할 수 있지만 case 매개 변수는 절대로 변경해서는 안됩니다.

그래서 당신을 "저장"경우 매개 변수 및 좋은 이름처럼 필요한 경우, static final public int 's의 (문제가 해결되지 않음)뿐만 아니라 integers.xml 드롭 - 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

이전에 enums에 대해 생각해 보았습니다.하지만 제 생각으로는 작동하지 않는 것 같습니다. 예를 들어 VALUE_ONE = 300, VALUE_TWO = 502입니다. 또한, 상수와 비교해야하는 정수 값 (변경할 수없는 값)을 얻습니다. 스위치/케이스는 이것을 허용하지 않는 것 같습니다 (C/C++에서는 가능합니다).하지만 어쨌든, integers.xml이 내게 도움이되지 않는다는 대답은 충분합니다. :) – jellyfish

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; 
} 
이의 아름다움은 내가, 코드에서 멀리 열거/정적 초기화를 제거 그것을 만드는 수 있다는 것입니다

더 읽기 쉽고 프로그램 전체에서 값을 재사용 할 수 있습니다.

과정 enums/static 값을 특정 클래스 나 메서드에서만 볼 수있게하려는 경우가 있습니다. 그렇다면 이것은 당신이하는 것이 아닙니다.

관련 문제