android - Fragments - onGlobalLayout() called twice -
सार्वजनिक वर्ग QuadPadFragment टुकड़ा विस्तार {int w = 0; int h = 0; सार्वजनिक देखें क्रिएटिव्यू (लेआउटइनफ्लेटर इन्फ्लाटर, अंतिम देखें ग्रुप कंटेनर, बंडल सहेजे गए इन्स्टेंसस्टेट) {अंतिम दृश्य दृश्य = inflater.inflate (आर। लेट। क्वैडपैडलेआउट, कंटेनर, झूठे); Container.getViewTreeObserver ()। AddOnGlobalLayoutListener (नया ViewTreeObserver.OnGlobalLayoutListener () {@Override सार्वजनिक शून्य पर ग्लोबल लेआउट () {h = कंटेनर.जेटअमित (); डब्ल्यू = कंटेनर.जेटमेटेडवेथ (); लॉग। W ("क्वाडपैड फ्रैग्मेंट: --- --- "," विंडो की चौड़ाई: "+ w +" विंडो की ऊँचाई: "+ एच); दृश्य.सेटलेआउटपारम (नया लेआउटप्रारम्स (1, 1));}}); वापसी दृश्य; }} मेरे पास लिखित वर्ग से ऊपर है, सब कुछ ठीक है, लेकिन मुझे क्या परेशान है, क्यों कि ग्लोबल लेआउट को दो बार कहा जाता है? मैं लॉग से ये आउटपुट प्राप्त कर रहा हूं: डब्ल्यू / क्वाडपैड टुकड़ा: ------ (27180): खिड़की की चौड़ाई: 1080 विंडो की ऊँचाई: 1 डब्ल्यू / क्वाडपैड टुकड़ा: ------ (27180): खिड़की चौड़ाई: 1080 विंडो की ऊँचाई: 1
मुझे लगता है कि ऐसा इसलिए है क्योंकि आपने LayoutParams सेट किया है यह फिर से वैश्विक लेआउट को कॉल करेगा आपको श्रोता को अपंजीकृत करना है, इसलिए इसे दो बार कॉल नहीं किया जा सकता उपरोक्त कोड श्रोता को निकाल देगा।
@Override सार्वजनिक शून्य पर ग्लोबल लेआउट () (यदि (Build.VERSION.SDK_INT & gt; = Build.VERSION_CODES.JELLY_BEAN) {container.getViewTreeObserver ()। RemoveOnGlobalLayoutListener (इस); } else {container.getViewTreeObserver ()। removeGlobalOnLayoutListener (यह); } h = कंटेनर.जेटमेटेडहाइट (); w = कंटेनर.गेटाइज्ड विथथ (); लॉग। W ("QuadPad टुकड़ा: ------", "विंडो की चौड़ाई:" + w + "विंडो ऊंचाई:" + एच); View.setLayoutParams (नया लेआउट पैरा (1, 1)); }
Comments
Post a Comment