[英]drawable == drawable?
這是我的問題......:
在我的活動中,我有一個ImageView
和一個Button
。 我希望Button僅在ImageView
顯示某個drawable時執行操作。 是的,這意味着ImageView
在各種drawable之間進行動畫處理,這些drawable被編碼,使得它不會因我想要的而中斷。
ImageView imgview = (ImageView)findViewById(R.id.imgviewsid);
Resources res = getResources();
Drawable acertaindrawable = res.getDrawable(R.drawable.thecertaindrawable);
Drawable variabledrawable = imgview.getDrawable();
if (variabledrawable == acertaindrawable)
{
//does something
}
它沒用。 我把它縮小到“if(variabledrawable == acertaindrawable)”這一行的錯誤。 雖然Eclipse沒有公然報告Android無法識別的錯誤,如果兩個drawables是相同的,我已經測試了代碼的其他區域,所有似乎都工作正常。
我知道發布此內容已經相當晚了,但對任何人用Google進行搜索都會有用。
我用了 。 getConstantState()
比較我的兩個drawables,它就像一個魅力:)
正如Itsik所解釋的那樣,即使兩個變量都包含對“看起來”相同的對象的引用,它們也是兩個不同的對象實例。
==運算符比較引用。 僅當兩個變量都引用同一個對象實例時才返回true。 相同的內存空間。
Drawable和BitmapDrawable都沒有實現一個特定的.equals()方法,該方法可以用於檢查2個實例是否包含相同的數據,因此Mathias Lin暗示嘗試.equals()將無效。
按照Itsik的建議而不必擴展Drawable,你可以做的是使用View.setTag()和View.getTag()方法。 這些方法允許將您選擇的任何Object附加到View並稍后檢索它。 通過在每次更改其內容時將簡單標識符(無論是技術整數標識符還是定義位圖源的URL)附加到ImageView,您將能夠輕松識別它。
嘗試if (acertaindrawable.equals(variabledrawable)) ...
variabledrawable和acertaindrawable不是同一個Object,即使它們可能顯示相同的drawable。
如果android沒有給你一個內置的方法來比較drawables(我猜它取決於你有的具體drawable),我的建議是擴展你正在使用的Drawable類並添加一個包含一些的私有字段一種ID,以便您可以比較drawables。
你也可以嘗試:
getId()和setId():=)
如果標簽已用於其他東西,也可以用於比較:)
Ps。:但請注意你是否使用RelativeLayouts ......:= P.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.