2015-01-20 1 views
1

그래서 국가 ISO 코드 목록 ("US", "UK", "AU"...)을 얻었고 주어진 ISO 코드에 따라 다른 드로어 블을 사용하고 싶습니다. 지금 내 해결책은 큰 switch 문을 사용하는 것입니다.런타임시 비트 맵 목록에서 드로어 블을 선택하는 깨끗한 방법?

switch(iso){ 
    case "AU": 
    icon = R.drawable.al_au; 
etc... 

이것은 다루기 힘들고 나쁜 연습입니다. 이 일을하는 더 깨끗한 방법이 있습니까? 내가 가진 유일한 생각은 ISO 코드에서 드로어 블 이름을 만들고 리플렉션을 사용하는 것이지만 너무 비효율적이라고 생각합니다.

icon = getResouces().getIdentifier(
      "al_" + iso.toLowerCase(), "drawable", getPackageName()); 

답변

2

당신은

같은이 Drawable 개체 자체를 얻으려면 할 수 그냥 해키 - 해커 일을 추가하고 싶었 :) 당신이 연속 된 이름의 정렬 된 목록을 제공 할 수있는 한, 당신은 단지 항목의 인덱스를 추가 할 수 있습니다 첫 번째 항목. P를하지만, 적어도 내 switch 문보다 더 낫다 : 나는 내 프로젝트에서이 솔루션을 사용하지는 않지만

icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso); 
0

:

iconDrawable = getResources().getDrawable(
        getResouces().getIdentifier("al_" + iso.toLowerCase(), 
             "drawable", getPackageName())); 

그냥 Drawable 식별자를 얻으려면 : 당신의 드로어 블 이름 지정 규칙을 따르는 경우

+0

나는 생각을 주셔서 감사합니다! –

관련 문제