मामले में यह कुछ नए देव के लिए उपयोग का है क्योंकि इसके ऊपर निर्दिष्ट नहीं किया गया है। बस बहुत स्पष्ट होना चाहिए:
ऑनकोनफिगरेशनचेंज किए जाने पर आपको दो चीजों की जरूरत है :
onConfigurationChangedआपकी गतिविधि कक्षा में एक विधि
अपने मेनिफेस्ट में निर्दिष्ट करें कि कौन से कॉन्फ़िगरेशन परिवर्तन आपकी विधि द्वारा नियंत्रित किए जाएंगेonConfigurationChanged
उपरोक्त उत्तरों में प्रकट स्निपेट, जबकि प्रकट होने वाले किसी विशेष एप्लिकेशन के लिए कोई संदेह सही नहीं है, यह बिल्कुल नहीं है कि आपको अपनी गतिविधि कक्षा में ऑनकोनफिगरेशनचेंज्ड विधि को ट्रिगर करने के लिए अपने मेनिफ़ेस्ट में जोड़ने की आवश्यकता है । यानी नीचे दी गई घोषणा प्रविष्टि आपके ऐप के लिए सही नहीं हो सकती है।
<activity name= ".MainActivity" android:configChanges="orientation|screenSize"/>
उपरोक्त प्रकट प्रविष्टि में, विभिन्न एंड्रॉइड क्रियाएं हैं, android:configChanges=""जिनके लिए आपकी गतिविधि जीवनचक्र में onCreate को ट्रिगर किया जा सकता है।
यह बहुत महत्वपूर्ण है - प्रकट में निर्दिष्ट नहीं होने वाले वही हैं जो आपके ऑनक्रिएट को ट्रिगर करते हैं और जो मेनिफेस्ट में निर्दिष्ट हैं वे वही हैं जोonConfigurationChanged आपकी गतिविधि कक्षा में आपके तरीके को ट्रिगर करते हैं ।
इसलिए आपको यह पहचानने की जरूरत है कि आपको अपने आप को संभालने के लिए कौन से कॉन्फिग चेंज की जरूरत है। मेरे जैसे एंड्रॉइड एनसाइक्लोपीडली चैलेंज्ड के लिए, मैंने एंड्रॉइड स्टूडियो में त्वरित संकेत पॉप-आउट का उपयोग किया और लगभग हर संभव कॉन्फ़िगरेशन विकल्प में जोड़ा। मूल रूप से इन सभी को सूचीबद्ध करते हुए कहा कि मैं सब कुछ संभाल लूंगा और कॉन्फ़िगरेशन के कारण ऑनक्रीट को कभी नहीं बुलाया जाएगा।
<activity name= ".MainActivity" android:configChanges="screenLayout|touchscreen|mnc|mcc|density|uiMode|fontScale|orientation|keyboard|layoutDirection|locale|navigation|smallestScreenSize|keyboardHidden|colorMode|screenSize"/>
अब जाहिर है कि मैं सब कुछ संभालना नहीं चाहता, इसलिए मैंने उपरोक्त विकल्पों को एक समय में समाप्त करना शुरू कर दिया। प्रत्येक हटाने के बाद मेरे ऐप का पुनः निर्माण और परीक्षण करना।
एक और महत्वपूर्ण बिंदु : यदि आपके पास केवल एक कॉन्फ़िगरेशन विकल्प होता है जो स्वचालित रूप से आपके ऑनक्रीट को ट्रिगर करता है (आपके पास इसके ऊपर आपके प्रकट में सूचीबद्ध नहीं है), तो ऐसा लगेगा जैसे onConfigurationChangedकाम नहीं कर रहा है। आपको सभी प्रासंगिक लोगों को अपनी अभिव्यक्ति में लाना होगा।
मैं 3 के साथ समाप्त हुआ जो मूल रूप से onCreate को ट्रिगर कर रहे थे, फिर मैंने एक S10 + पर परीक्षण किया और मुझे अभी भी onCreate मिल रहा था, इसलिए मुझे अपना उन्मूलन अभ्यास फिर से करना पड़ा और मुझे इसकी आवश्यकता भी थी |screenSize। इसलिए प्लेटफार्मों के चयन पर परीक्षण करें।
<activity name= ".MainActivity" android:configChanges="screenLayout|uiMode|orientation|screenSize"/>
इसलिए मेरा सुझाव है, हालांकि मुझे यकीन है कि कोई इसमें छेद कर सकता है:
onConfigurationChangedअपनी गतिविधि कक्षा में एक टोस्ट या लॉग के साथ अपनी विधि जोड़ें ताकि आप देख सकें कि कब यह काम कर रहा है।
अपने प्रकट करने के लिए सभी संभव कॉन्फ़िगरेशन विकल्प जोड़ें।
पुष्टि करें कि आपका onConfigurationChangedतरीका आपके ऐप का परीक्षण करके काम कर रहा है।
प्रत्येक समय के बाद अपने एप्लिकेशन का परीक्षण करते हुए, अपनी मैनिफ़ेस्ट फ़ाइल से प्रत्येक कॉन्फ़िगरेशन विकल्प को निकालें।
संभव के रूप में बड़े उपकरणों की एक किस्म पर परीक्षण करें।
अपनी प्रकट फ़ाइल के ऊपर मेरे स्निपेट को कॉपी / पेस्ट न करें। एंड्रॉइड अपडेट सूची को बदलते हैं, इसलिए यह सुनिश्चित करने के लिए पॉप-आउट एंड्रॉइड स्टूडियो संकेत का उपयोग करें कि आप उन सभी को प्राप्त करते हैं।
मुझे आशा है कि यह किसी को कुछ समय बचाता है।
onConfigurationChangedनीचे दी गई जानकारी के लिए मेरा तरीका। नई अभिविन्यास उपलब्ध होने के बादonConfigurationChanged जीवनचक्र में कहा जाता है, लेकिन इससे पहले कि यूआई को फिर से बनाया गया है। इसलिए मेरा पहला ओरिएंटेशन काम करता है सही ढंग से जांच करने के लिए, और फिर मेरे UI ImageView की दृश्यता को देखने के लिए 2 नेस्टेड भी सही ढंग से काम करता है।ifif
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
pokerCardLarge = findViewById(R.id.pokerCardLgImageView);
if(pokerCardLarge.getVisibility() == pokerCardLarge.VISIBLE){
Bitmap image = ((BitmapDrawable)pokerCardLarge.getDrawable()).getBitmap();
pokerCardLarge.setVisibility(pokerCardLarge.VISIBLE);
pokerCardLarge.setImageBitmap(image);
}
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
pokerCardLarge = findViewById(R.id.pokerCardLgImageView);
if(pokerCardLarge.getVisibility() == pokerCardLarge.VISIBLE){
Bitmap image = ((BitmapDrawable)pokerCardLarge.getDrawable()).getBitmap();
pokerCardLarge.setVisibility(pokerCardLarge.VISIBLE);
pokerCardLarge.setImageBitmap(image);
}
}
}