2011-08-21 14 views
55

मैं सिर्फ हनीकॉम्ब के लिए अपने कुछ अनुप्रयोगों को अनुकूलित करने की कोशिश कर रहा हूं। , अब एंड्रॉइड: configChanges = "ओरिएंटेशन" टुकड़े के साथ काम नहीं करता

लेकिन सभी:

मुद्दा द्वितीय बजे की ओर रुख बदलने पर मेरी गतिविधि (परिदृश्य/पोर्ट्रेट) के विनाश

जब मैं एक क्लासिक गतिविधि का उपयोग किया गया था, मैं प्रकट में लिखा है ये लाइनें अब और काम नहीं कर रही हैं!

क्या इसके लिए कोई कामकाज है?

मेरे कोड:

<activity android:name=".TwitterActivity" android:label="@string/app_name" 
     android:configChanges="keyboardHidden|orientation" /> 

    <activity android:name=".TwitterActivity$AppListFragment" 
    android:configChanges="keyboardHidden|orientation" /> 

उत्तर

72

हनीकोम्ब 3.0 और अनुकूलता पुस्तकालय (आर 1) के साथ अपने अनुभव के आधार पर।

configChange="orientation" गतिविधि को रोकने के लिए टुकड़ों के साथ काम करता है (जिसे इसे लागू किया जाता है) एक अभिविन्यास परिवर्तन पर फिर से बनाया जा रहा है। यदि आप fragment गतिविधि पुन: निर्माण पर पुन: निर्मित नहीं करना चाहते हैं तो setRetainInstance पर onCreate पर कॉल करें।

जब तक मुझे कुछ याद नहीं आ रहा है, मुझे आपकी दूसरी मेनिफेस्ट प्रविष्टि नहीं मिलती है, AppListFragmentFragment नहीं है? यदि ऐसा है तो यह आपके मैनिफेस्ट में प्रवेश के रूप में क्यों सूचीबद्ध है?

देखें नई क्वालिफायर जो की संभावना है के लिए SO Answer इस android:configChanges="orientation|screenSize"

+0

दूसरा मैनिफेस्ट प्रविष्टि सिर्फ एक परीक्षण है क्योंकि मैं बहुत निराश था। मैं आपको वादा कर सकता हूं कि सेटिंग कॉन्फ़िगरेशन = "ओरिएंटेशन" गतिविधि के अंदर खंड के लिए काम नहीं करता है। –

+0

@ Profete162 मुझे यकीन नहीं है कि 'गतिविधि के अंदर टुकड़े के लिए काम नहीं करता' से आपका क्या मतलब है। अंदर के टुकड़े गतिविधि के मनोरंजन पर कोई प्रभाव नहीं होना चाहिए। आपका लक्ष्य एसडीके क्या सेट है? संभावित उत्तर के लिए [लिंक] (http://stackoverflow.com/questions/6968105/orientation-change-in-honeycomb) देखें। – PJL

+0

उत्तर बहुत अच्छा लगता है, काम पर जायेगा और इस शाम को आजमाएगा, लेकिन मुझे पूरा यकीन है कि आपका जवाब स्वीकार कर लिया जाएगा! 'स्क्रीनसाइज' संकेत के लिए –

36

कोशिश कर कारण हो अगर आप एसडीके 13 लक्ष्यीकरण कर रहे हैं, सुझाव है कि मैं एक बहुत ही इसी तरह की समस्या थी, लेकिन इसके साथ काम करने के लिए प्राप्त करने के लिए अतिरिक्त के एक जोड़े करना था विभिन्न संस्करण (आईसीएस सहित)।

मुख्य ऐप गतिविधि में मैंने जेसन की पेशकश की एक अलग संस्करण जोड़ा।

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

मैं इसे सभी संस्करणों पर चलाने के लिए पहला उदाहरण करना था:

<activity 
android:name=".MyMainActivity" 
android:configChanges="orientation|keyboardHidden|screenSize" 
android:label="@string/app_name" > 

मैं इस के साथ पहले से हनीकोम्ब पर काम कर रहा था। मैं वर्तमान में पीछे की संगतता के लिए टुकड़े और एक्शनबारशेलॉक का उपयोग कर रहा हूं।

मैं भी तरह से मैं बचत कर रहा था और फिर से लोड करने के लिए बदल:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     // Set up webview object 
     View v = inflater.inflate(R.layout.webview_layout, container, false); 
     webview = (WebView)v.findViewById(R.id.webview_fragment); 
     webview.getSettings().setJavaScriptEnabled(true); 

     // Check to see if it has been saved and restore it if true 
     if(savedInstanceState != null) 
     { 
      if (savedInstanceState.isEmpty()) 
       Log.i(tag, "Can't restore state because bundle is empty."); 
      else 
      { 
       if (webview.restoreState(savedInstanceState) == null) 
        Log.i(tag, "Restoring state FAILED!");  
       else 
        Log.i(tag, "Restoring state succeeded.");  
      } 

     } 
     else 
     { 
      // Load web page 
      webview.setWebViewClient(new MyWebViewClient()); 
      webview.getSettings().setPluginsEnabled(true); 
      webview.getSettings().setBuiltInZoomControls(false); 
      webview.getSettings().setSupportZoom(false); 
      webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      webview.getSettings().setAllowFileAccess(true); 
      webview.getSettings().setDomStorageEnabled(true); 
      webview.loadUrl(mTabURL);  
     } 
     return v; 
    } 

बचाने उदाहरण राज्य विधि के लिए कोड:

 @Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
     if(webview.saveState(outState) == null) 
      Log.i(tag,"Saving state FAILED!"); 
     else 
      Log.i(tag, "Saving state succeeded.");  
    } 

आशा इस मदद करता है।

+0

बहुत बहुत धन्यवाद, इससे मुझे आईसीएस में अपने ऐप को अपग्रेड करते समय एक ही समस्या के साथ मदद मिली। –

+0

यह मेरे लिए काम किया। धन्यवाद –

34

एपीआई 13 तक configChanges श्रेय देने के लिए एक नया मान, screenSize

तो तुम बड़ी स्क्रीन का उपयोग कर रहे हैं यदि आपके configChanges में screenSize जोड़ना सुनिश्चित करें वहाँ था विशेषता:

 android:configChanges="orientation|keyboardHidden|screenSize" 
+1

क्या स्क्रीनसाइज एपीआई पर एक क्रैश करेगी <13? –

9

के साथ शुरू एंड्रॉइड 3.2 (एपीआई लेवल 13), जब डिवाइस पोर्ट्रेट और लैंडस्केप ओरिएंटेशन के बीच स्विच करता है तो "स्क्रीन साइज" भी बदल जाता है।इस प्रकार, यदि आप एपीआई स्तर 13 या उच्चतर (जैसा कि minSdkVersion और targetSdkVersion विशेषताओं द्वारा घोषित किया गया है) के लिए विकास करते समय अभिविन्यास परिवर्तन के कारण रनटाइम पुनरारंभ करना रोकना चाहते हैं, तो आपको "अभिविन्यास" मान के अतिरिक्त "स्क्रीन आकार" मान शामिल करना होगा। यही है, आपको एंड्रॉइड को डीकलेयर करना होगा: configChanges = "ओरिएंटेशन | स्क्रीनसाइज"। हालांकि, यदि आपका एप्लिकेशन एपीआई स्तर 12 या उससे कम लक्षित करता है, तो आपकी गतिविधि हमेशा इस कॉन्फ़िगरेशन को स्वयं ही बदलती है (यह कॉन्फ़िगरेशन परिवर्तन आपकी गतिविधि को पुनरारंभ नहीं करता है, यहां तक ​​कि एंड्रॉइड 3.2 या उच्चतर डिवाइस पर चलते समय भी)।

1

मुझे पता है कि यह काफी देर का जवाब है, लेकिन मुझे हाल ही में इस मुद्दे का सामना करना पड़ा और यह फ्रैगमेंट गतिविधि के लिए इसे हल करने में सक्षम था।

1) प्रकट में,

 android:configChanges="orientation|keyboardHidden|screenSize" 

2) कक्षा फ़ाइल में onSaveInstanceState (बंडल outState) ओवरराइड। यह बात करता है! आनंद लें :)

4

मुझे यह समस्या हो रही थी (यानी, गतिविधि पुनरारंभ करना) टुकड़ों के बिना भी।

मैं बदल दिया है:

android:configChanges="orientation|keyboardHidden" 

रहे हैं:

android:configChanges="orientation|keyboardHidden|screenSize" 

कि पुन: प्रारंभ करने से गतिविधि को रोकने।

0

मैनिफेस्ट फ़ाइल में, गतिविधि के अंदर इस लाइन को
एंड्रॉइड: configChanges = "कीबोर्ड | कीबोर्डहेड | अभिविन्यास | स्क्रीनसाइज" जोड़ें।

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