본문 바로가기

Android/Samples & Tips

[Android] resource fields cannot be used as switch-cases(convert to if-else)


안드로이드 애플리케이션 개발을 계속해서 하다보니, 항상 신규 버전을 설치해 놓고 쓰곤 합니다.

그런데 이런 이슈가 있더라구요.

 
 As of ADT 14, resource fields cannot be used as switch cases.
 Invoke this fix to get more information.

 

ADT 14부터 리소스 필드는 switch-case로 사용할 수 없다고 합니다. 두두둥ㅠ

정확히 말하자면
ADT 14에서의 library project는 리소스 필드를 switch-case로 사용할 수 없는 것
입니다.




ADT 14이후의 Library project에서의 R.java 파일을 보면 이렇게 바뀌었습니다.

예전의 R.java


현재의 R.java


예전에는 public static final int 변수명; 으로 되어있던 녀석들이 final이 빠져버렸습니다.
(위의 [더보기]를 참고하세요~)



아무튼, 이제 라이브러리 프로젝트에서 예전처럼 switch-case에 리소스 필드를 사용할 수 없는건 알겠습니다.
그럼 어떻게 해야 될까요?


if-else로 쓰는게 일단은 정답이라고 생각되네요.
switch()... 가 있는 곳에서 Ctrl + 1(Command + 1)을 누르면 바로 위의 스크린샷과 같은 화면을 보실 수 있습니다.

처음에는 값을 찾아올때만 사용하라는 것인가.. 라는 생각도 했지만(비교할때는 쓰지 말라는 것인가.. 라는 생각),
switch-case에서만 사용하지 않으면 되는것 같습니다.(실제로 final이 빠져서 사용할수도 없구요. ㅎ)

결과적으로는 switch-case문을 요렇게 변경해서 사용하면 된다는 얘기입니다.


뭐... 조금 귀찮지만... ADT 형이 시키는데로 해야겠죠... ㅋ
(v.getId()같은 경우는 int id = v.getId(); 와 같이 쓰셔도 되구요.)