2013-03-01 15 views
39

मेरे पास कुछ कोड है जो सफलतापूर्वक ViewTreeObserver#removeOnGlobalLayoutListener(...) का उपयोग करके संकलित करता है और जब यह चलता है, तो यह विधि NoSuchMethodError फेंकता है। क्यूं कर?RemOOGGobalLayoutListener क्यों एक NoSuchMethodError फेंक देता है?

+1

काम कर रहा है कहाँ कोड है:

try { thing.removeOnGlobalLayoutListener(victim); } catch (NoSuchMethodError x) { thing.removeGlobalOnLayoutListener(victim); } 

तो यह कोड करता है? – Rawkode

+1

मुझे समाधान पता है, मैं सिर्फ लोकप्रिय और जीवंत प्रश्न-उत्तर-उत्तर प्रारूप में पोस्ट कर रहा था :) –

+0

मुझे लगता है कि आप केवल कुछ अपवॉट प्राप्त करने की कोशिश कर रहे थे, लेकिन आप कम से कम @azertiti को दाएं दे सकते हैं उत्तर :) – Rigotti

उत्तर

142

दोViewTreeObserver में लगभग समान नाम के साथ विधियां हैं।

removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

( पर तो वैश्विक) एक विधि है कि एपीआई में जोड़ा गया है 16. यह

removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

(वैश्विक तो पर ) जो बदल देता है एपीआई 1 के बाद से अस्तित्व में था, लेकिन अब इसे हटा दिया गया है।

संकलन समय पर दोनों विधियां उपस्थित हो सकती हैं (यदि आप जेलीबीन या उच्चतर के खिलाफ निर्माण कर रहे हैं) लेकिन नया व्यक्ति जेलीबीन उपकरणों पर असफल हो जाएगा।

इस कोड त्रुटि thwarts:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
    thing.removeGlobalOnLayoutListener(victim); 
} else { 
    thing.removeOnGlobalLayoutListener(victim); 
} 
+0

धन्यवाद आप अपनी समस्या और समाधान साझा करने के लिए। मैंने आपके कोड की कोशिश की और अभी भी समस्या का सामना करना पड़ा। क्या आप http://stackoverflow.com/questions/18285540/stop-listening-for-more-listener-events पर मेरे प्रश्न देखेंगे? – Geek

+22

वाह, ऐसा लगता है कि Google डेवलपर को ट्रॉल करने का प्रयास कर रहा है। इस समाधान के लिए धन्यवाद! –

+3

हा, मुझे पता है तुम्हारा क्या मतलब है! मुझे लगता है कि यह 'ViewTreeObserver # addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener)' के साथ स्थिरता के लिए है और किसी ने एंड्रॉइड 1.5 में गलती की है, और एंड्रॉइड 4 तक इसे ठीक करने के लिए कोई भी परेशान नहीं है .... –

4

मुझे लगता है कि आप ViewTreeObserver क्लास से removeOnGlobalLayoutListener के बारे में बात कर रहे हैं। यह विधि एपीआई स्तर 16 में जोड़ा गया था। मेरा सबसे अच्छा अनुमान यह है कि आप एंड्रॉइड के पुराने संस्करण को चलाने वाले डिवाइस पर इसका उपयोग करने का प्रयास करते हैं, यही कारण है कि यह नहीं मिला।

+0

मुझे पता है, मैंने अभी पाया है और सोचा है कि यह हर किसी को 'removeGlobalOnLayoutListener (...) '(बहिष्कृत, एपीआई 1) के बारे में बताने लायक होगा :) –

2

मैं कोड

public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){ 
    if (Build.VERSION.SDK_INT < 16) { 
     v.getViewTreeObserver().removeGlobalOnLayoutListener(listener); 
    } else { 
     v.getViewTreeObserver().removeOnGlobalLayoutListener(listener); 
    } 
} 
संबंधित मुद्दे