2010-12-12 9 views
5

यह मेरी समस्या नहीं है ...:drawable == drawable?

मेरी गतिविधि में मैं एक ImageView और एक Button है। मैं बटन को केवल एक क्रिया करने के लिए चाहता हूं जब ImageView एक निश्चित ड्राइटेबल प्रदर्शित करता है। और हां, इसका मतलब है कि ImageView कोड किए गए विभिन्न ड्रॉबल्स के बीच एनिमेटिंग कर रहा है जैसे कि यह मेरे द्वारा किए गए कार्यों में बाधा नहीं डालता है।

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 
    } 

यह काम नहीं किया। और मैंने इसे लाइन की गलती तक सीमित कर दिया है "अगर (variabledrawable == acertaindrawable)"। जबकि ग्रहण त्रुटियों की स्पष्ट रूप से रिपोर्ट नहीं करता है कि एंड्रॉइड पहचान नहीं सकता है कि दो ड्रॉबल्स समान हैं, मैंने कोड के अन्य क्षेत्रों का परीक्षण किया है और सभी ठीक काम करने लगते हैं।

उत्तर

3

जैसा कि इटिक द्वारा समझाया गया है, भले ही दोनों चरों में ऑब्जेक्ट्स के संदर्भ हों, जो 'देखो' वही हैं, वे 2 अलग-अलग ऑब्जेक्ट्स उदाहरण हैं।

== ऑपरेटर संदर्भों की तुलना करता है। यह केवल तभी सत्य होता है जब दोनों चर समान ऑब्जेक्ट उदाहरण यानी संदर्भित करते हैं। वही स्मृति स्थान।

न तो ड्रायबल और न ही बिटमैप ड्रायबल एक विशिष्ट .equals() विधि को लागू करता है जिसे जांचने के लिए अनुकूलित किया जा सकता था कि 2 उदाहरणों में एक ही डेटा होता है, इसलिए माथीस लिन संकेत देने के लिए संकेत देता है .equals() काम नहीं करेगा।

ड्रायबल का विस्तार किए बिना इटिक की सलाह के बाद आप क्या कर सकते हैं, View.setTag() और View.getTag() विधियों का उपयोग करें। ये विधियां आपकी पसंद के किसी ऑब्जेक्ट को एक दृश्य में संलग्न करने और इसे बाद में पुनर्प्राप्त करने की अनुमति देती हैं। एक साधारण पहचानकर्ता को संलग्न करके (चाहे वह एक तकनीकी पूर्णांक पहचानकर्ता हो या बिटमैप के स्रोत को परिभाषित करने वाला यूआरएल) प्रत्येक बार जब आप अपनी सामग्री बदलते हैं, तो आप इसे आसानी से पहचान पाएंगे।

+0

बस जिस दिशा की मुझे आवश्यकता है, टैग के उपयोग ने निश्चित रूप से जो हासिल करना चाहते हैं उसमें मदद की है। धन्यवाद! – sneak14

2

if (acertaindrawable.equals(variabledrawable)) ...

2

variabledrawable की कोशिश करो और acertaindrawable एक ही वस्तु नहीं हैं, भले ही वे ही drawable सुझा सकता है।

यदि एंड्रॉइड आपको ड्रॉबल्स की तुलना करने के लिए एक अंतर्निहित तरीका नहीं देता है (मुझे लगता है कि यह आपके द्वारा खींचा जाने योग्य कंक्रीट पर निर्भर करता है), तो मेरी सलाह है कि आप जिस ड्रायरेबल क्लास का उपयोग कर रहे हैं उसे बढ़ाएं और एक निजी जोड़ें फ़ील्ड जिसमें कुछ प्रकार की आईडी होती है ताकि आप ड्रॉबल्स के बीच तुलना कर सकें।

1

तुम भी कोशिश कर सकते हैं:

getId() और setId(): =)

भी तुलना के लिए इस्तेमाल किया जा सकता है, तो पहले से ही टैग कुछ और :)

पीएस के लिए उपयोग किया जाता है ।: आप RelativeLayouts उपयोग कर रहे हैं लेकिन देखना ...: = पी

8

मुझे पता है कि इसे पोस्ट करने में काफी देर हो चुकी है, लेकिन यह किसी भी व्यक्ति के लिए उपयोगी होगा।

मैंने उपयोग किया। getConstantState() मेरे दो ड्रॉबल्स की तुलना करने के लिए और यह एक आकर्षण की तरह काम करता है :)