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

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

 
 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(); 와 같이 쓰셔도 되구요.)

Posted by croute

댓글을 달아 주세요

  1. 꼬부기 2011.11.21 23:30  댓글주소  수정/삭제  댓글쓰기

    저는 xml테스트하는데 그게뜨더라구요.
    순수 xml블러오기 할뿐인데...
    그것도 같은이유인가요?

    • Favicon of https://croute.me BlogIcon croute 2011.11.22 00:48 신고  댓글주소  수정/삭제

      순수 xml 이라면,
      안드로이드에서 리소스로 사용하는게 아닌,
      일반적인 xml파일을 말씀하시는것인가요?

      음... 이 부분은 리소스에만 해당된다고 생각하고 있었는데 저도 테스트해봐야하겠네요. ㅎ

  2. 파이리 2013.09.26 17:20  댓글주소  수정/삭제  댓글쓰기

    ADT버전 14 아래로 낮추면 해결이 되겠죠...?
    모든 걸 switch문으로 코딩해놔서요ㅠㅠ