2011-02-28 72 views
2

我使用了一種直觀但也許非正統的捷徑,我只是想知道它是否會導致問題,是不好的形式,還是如果有是一種不同的,更爲接受的方式。Android - 使用int值0作爲「null」 - 等價於R.drawable

這個快捷方式是:在一個函數中,這個函數需要一個作爲R.drawable常量的int類型,我有時候會使用0作爲傳遞「null」的等價函數。

這裏有一種模板的我如何使用這樣的:

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 S'dTFW對於某些官方的整數值,在這種情況下會被識別爲「空」,但空了。有誰知道這樣的價值是否存在?

編輯: 我意識到標籤「r」不是指我想要的。然而,標籤「android.R」似乎並不存在。我想我現在會刪除標籤。

+0

已經接受了答案,我似乎無法回答我自己的問題。因此,我將此留作評論。 縱觀ImageView源代碼,似乎設置位圖或其他可繪製設置mResource值爲零。此外,每當mResource值被顯着使用時,它都會被一個!= 0檢查保護。這非常強烈地支持0是一個特殊的值;沒有實際的資源會有'0'作爲它的分配值。這使我謹慎地認爲使用0作爲null是安全的。儘管如此,仍然不好,請參閱下面的接受答案。 – Cephron 2011-02-28 22:00:21

回答

4

沒有資源表示「null」,並且通過傳入無效的資源ID,異常會在內部拋出並處理(當調用getDrawable(0)時)。當有一個有效的drawable時,正確的做法是隻調用UpdateSomeUI(someDrawable)

喜歡的東西

//in a method somewhere: 
if(isSomeCondition()) { 
    mHandler.post(new UpdateSomeUI(R.drawable.somedrawable_identifier)); 
} 

這有什麼錯做呀?

+0

區別在於,當isSomeCondition()停止爲真時,我希望圖像真正消失。如果我使用位圖,我會調用setImageBitmap(null)以使圖像從視圖中消失;我試圖做setImageResource(0)的等價物。 – Cephron 2011-02-28 21:02:33

+1

我認爲正確的做法是傳遞View.VISIBLE或View.GONE並調用setVisibility。 – Cephron 2011-02-28 21:13:58

+0

那麼爲什麼不隱藏ImageView呢? – 2011-02-28 21:14:05