2011-06-15 20 views
8

में बुलाया जा रहा है नहीं है मुझे पता है इस विषय पर कुछ अन्य पदों देखते हैं कि, हालांकि उन पदों के लिए समाधान मेरे लिए काम नहीं कर रहे हैं।एंड्रॉयड onConfigurationChanged() गतिविधि

मूल रूप से, मैं एक डिवाइस अभिविन्यास परिवर्तन पर पुन: प्रारंभ करने से मेरे गतिविधि बंद करने के लिए चाहते हैं। ऐसा करने के लिए, मैं मैनिफ़ेस्ट फ़ाइल में गतिविधि को संशोधित किया है:

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden"></activity> 

और मैं अपने गतिविधि में अधिरोहित है

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    System.out.println("IN onConfigurationChanged()"); 
} 

हालांकि, गतिविधि अभी भी एक उन्मुखीकरण परिवर्तन पर पुन: प्रारंभ कर रहा है, और विधि नहीं कहा जा रहा है।

क्या किसी को पता है कि क्यों यह हो रहा जा सकता है?

उत्तर

1

केवल बात यह है कि काम किया getLastNonConfigurationInstance उपयोग कर रहा था()। http://developer.android.com/reference/android/app/Activity.html#getLastNonConfigurationInstance()

+0

इससे मेरी मदद मिली। मैंने TabWidget गतिविधि में इस विधि को ओवरराइड कर दिया है, क्योंकि मेरी सभी गतिविधियां टैब में बनाई गई थीं। हालांकि, एंड्रॉइड डेवलपर्स का कहना है कि इस विधि को बहिष्कृत किया गया है ... धन्यवाद थोड़ा। – lomza

0

अगर आप configchanges = अपने प्रकट तो गतिविधि को पुनः आरंभ नहीं होगा में उन्मुखीकरण को परिभाषित लेकिन इसके बजाय onConfigurationChanged के रूप में आप वर्तमान में इसे लागू किया है है फोन कर दिया जाएगा। सबसे पहले लॉग क्लास लॉग के साथ लॉग इन करने का प्रयास करें (एंड्रॉइड में चीजों को लॉग करने का यह सही तरीका है इसके लिए सिस्टम का उपयोग न करें, इसे खराब अभ्यास माना जाता है) और सुपर से पहले, लेकिन यह केवल 1% मौका है जो ठीक करेगा आप के साथ हो रहा है

दूसरे मामले जिससे आप वर्तमान गतिविधि उदाहरण या गतिविधि समूह के लिए एक tabHost में नेस्ट है। यदि आपकी गतिविधि में माता-पिता की गतिविधि है तो उसमें कॉन्फ़िगरेशन परिवर्तन को जोड़ा जाना चाहिए और कॉलबैक वहां होगा।

यदि ऐसा है और आप परिणाम को अग्रेषित करना चाहते हैं या बच्चे में कुछ भी करना चाहते हैं तो आपको माता-पिता में बच्चे का संदर्भ प्राप्त करना होगा और परिवर्तनों के लिए उस पर एक विधि कॉल करना होगा।

+0

मेरी गतिविधि का विस्तार करता है ListActivity, वह यह है कि आपका मतलब क्या है? – littleK

+0

अच्छा नहीं। मेरा मतलब है नेस्टेड गतिविधियों या उसके जैसा कुछ टैब लेआउट रखना। एक सूची गतिविधि नेस्टेड नहीं किया है यह सिर्फ एक प्रकार की गतिविधि है। – DArkO

1

आपको setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) का उपयोग नहीं करना चाहिए; विधि आपके कॉल में कहीं भी कॉल करें, यह कॉन्फिग चेंज() विधि पर कॉल करने से बचना होगा।

-2

Modefiy निम्नलिखित

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
8

करने के लिए अपने onConfigurationChanged विधि आपकी आयु 13 वर्ष एपीआई का उपयोग और प्रकट की अपनी गतिविधि के हिस्से में इस विन्यास स्थापित करना चाहिए: एंड्रॉयड: configChanges = "उन्मुखीकरण | keyboardHidden | screenSize"

यह ठीक काम करता है। सभी एंड्रॉइड संस्करण पर।

+3

शायद यह मुझे छोड़कर हर किसी के लिए स्पष्ट है, लेकिन यह मैनिफेस्ट के गतिविधि खंड में जाता है। –

+0

एंड्रॉइड एपीआई 13+ पर यह सही और सबसे अच्छा जवाब है, इस घटना को स्क्रीनसाइज कहा जाता है और अगर इसे संभाला नहीं जाता है तो गतिविधि को पुनरारंभ करें !! बहुत बहुत धन्यवाद। – Darkendorf

+0

यह या तो एंड्रॉइड के साथ काम करता है: स्क्रीनऑरिएंटेशन परिभाषित किया गया है, या इसके साथ "पूर्ण सेंसर" पर सेट किया गया है। "सेंसर पोर्ट्रेट" काम नहीं करता है। – Robert

0

यदि आप एक टुकड़ा तो आप यह भी जरूरत है:

void setRetainInstance(boolean retain) 

एक टुकड़ा उदाहरण (जैसे एक विन्यास परिवर्तन से के रूप में) गतिविधि फिर से निर्माण भर में बनाए रखा है इसे नियंत्रित करें कि।

मैं इसमें भाग गया और इसे 'सत्य' पर सेट कर दिया।

0

मैं इस प्रयोग किया जाता है, और यह मदद की:

package="com.s2dio.evallet" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
android:minSdkVersion="8" 
android:targetSdkVersion="8" /> 
+3

नहीं, यह एक अच्छा जवाब नहीं है, तो आप 13 sdk वर्शन को संभालने के लिए प्रकट में onConfigChanges को screenSize विकल्प जोड़ने की जरूरत – Tobrun

1

<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden|screenSize"></activity> 

निम्नलिखित अपने मेनिफ़ेस्ट बदलें और विस्तृत विवरण के लिए इस लिंक का उल्लेख orientation issue

संबंधित मुद्दे