2011-02-28 5 views
2

직관적이지만 아마 정통이지 않은 지름길을 사용하고 있습니다. 문제가 발생할 수 있는지, 나쁜 형식인지, 또는 그것을하는 다른, 더 받아 들여진 방법이다.안드로이드 - int 값 0을 "null"로 사용 - R.drawable에 해당함

바로 가기는 : R.drawable 상수 인 int를 예상하는 함수에서 "null"을 전달하는 것과 같은 역할을하기 위해 0을 사용하는 경우가 있습니다. 지금까지 내가 원하는 일을 한 것, 즉, 지금까지 나는 더 부작용이 관찰되지 않은 -

int someDrawable = isSomeCondition() ? R.drawable.somedrawable_identifier : 0; mHandler.post(new UpdateSomeUI(someDrawable));

//and, elsewhere in the application, 
private class UpdateSomeUI implements Runnable { 
    private final int someDrawable; 

    public UpdateSomeUI(int someDrawable) { 
     this.someDrawable = someDrawable; 
    } 

    public void run() { 
     mSomeImageView.setImageResource(someDrawable); 
    } 
} 

작동하는 것 같다 : 여기

내가이 사용하는 방법의 템플릿의 일종 장치 내에서 충돌 또는 양자 특이점 생성과 같은 문제가 발생할 수 있습니다.

안전한 방법인가요? 이 나쁜 형태입니까? I 이런 종류의 상황에서 "null"로 인식되지만 공백이되는 공식 정수 값의 경우 S'dTFW. 그런 가치가 있는지 아는 사람 있습니까?

편집 : 태그 "r"이 내가 원하는 것을 언급하지 않는다는 것을 알고 있습니다. 그러나 "android.R"태그는 존재하지 않는 것 같습니다. 나는 지금 태그를 제거 할 것 같아.

+0

답변을 수락하면 현재 내 질문에 답변 할 수없는 것 같습니다. 그러므로 저는 이것을 코멘트로 남겨 두었습니다. ImageView 소스 코드를 살펴보면 비트 맵이나 다른 드로어 블을 설정하면 mResource 값을 0으로 설정하는 것 같습니다. 또한 mResource 값이 많이 사용될 때마다! = 0 검사로 보호됩니다. 이것은 0이 특별한 값이라는 것을 강력하게 지원합니다; 실제 리소스는 할당 된 값으로 '0'을 갖지 않습니다. 이것은 0을 null로 사용하는 것이 안전하다고 조심스럽게 믿는다. 여전히 나쁜 형식이지만, 아래의 대답을 참조하십시오. – Cephron

답변

4

"null"을 나타내는 리소스가없고 유효하지 않은 리소스 ID를 전달하면 예외가 발생하고 내부적으로 처리됩니다 (getDrawable(0)이 호출 될 때). 실제로 수행 할 수있는 적절한 작업은 유효한 drawable이있을 때 UpdateSomeUI(someDrawable)으로 호출하는 것입니다.

그런 식으로 일을 잘못 무엇
//in a method somewhere: 
if(isSomeCondition()) { 
    mHandler.post(new UpdateSomeUI(R.drawable.somedrawable_identifier)); 
} 

같은 뭔가?

+0

차이점은, isSomeCondition()이 true 일 때 이미지가 실제로 사라지 길 원합니다. 비트 맵을 사용했다면 이미지를 뷰에서 사라지게하려면 setImageBitmap (null)을 호출합니다. setImageResource (0)와 동등한 작업을 수행하려고했습니다. – Cephron

+1

내가해야 할 일은 View.VISIBLE 또는 View.GONE을 전달하고 setVisibility를 호출하는 것입니다. – Cephron

+0

그런 다음 ImageView를 대신 숨기지 않으시겠습니까? –

관련 문제