2015-02-05 15 views
6

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    tools:context="com.example.android.ui.RegisterActivity"> 

    <LinearLayout 
     android:id="@+id/register_container" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"></LinearLayout> 

</RelativeLayout> 

अब प्रत्येक खंड वर्ग RegisterActivity में लागू ताकि मैं अगले कदम टुकड़ा लोड करने के लिए जानते हैं कि एक सार्वजनिक इंटरफ़ेस लागू करता है और मैं backstack

mFragmentTransaction.addToBackStack(mStepOne.TAG); 

अब यह सब ठीक काम करता है के लिए नए टुकड़ा जोड़ने 4 चरणों के माध्यम से और मैं प्रत्येक खंड में इनपुट डेटा को बनाए रखते हुए चरणों के माध्यम से वापस नेविगेट कर सकता हूं यदि यह उसी अभिविन्यास (पोर्टेट)

पर एक बार बदलता है ई अभिविन्यास, टुकड़ा विचारों गायब

अगर मैं कर रहा हूँ तो चरण 3 पर, मैं अभी भी वापस बटन हिट कर सकते हैं और इसे वापस मुझे टुकड़ा है कि backstack देखकर वहाँ करने के लिए है दिखा जाना होगा श्रोता

बदल
mFragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      if(mFragmentManager.getBackStackEntryCount() > 0) { 
       Log.d("BACK STACK", "TAG (name): " + mFragmentManager.getBackStackEntryAt((mFragmentManager.getBackStackEntryCount() - 1)).getName()); 
      } 
     } 
    }); 

टुकड़ों की गिनती और टैग बनाए रखा गया है लेकिन विचार नहीं। RegisterActivity onCreateView दृश्य खंड को दृश्य में लोड करता है और चरणों के माध्यम से वापस नेविगेट करते समय यह ध्यान में रहता है।

mFragmentManager = getSupportFragmentManager(); 
mFragmentTransaction = mFragmentManager.beginTransaction(); 
mTerms = new RegisterFragmentTerms(); 
mFragmentTransaction.add(R.id.register_container, mTerms); 
mFragmentTransaction.commit(); 

मुझे ऐसा लगता है विचारों एक दूसरे के ऊपर पर RegisterActivity में लोड और अभिविन्यास परिवर्तन पर मंजूरी दी जाती है। क्या मैं इसे हल करने की कोशिश कर रहा हूं? या मैंने इसे गलत लागू किया है? यह मेरी पहली Android एप्लिकेशन :)

चीयर्स

उत्तर

6

यह गतिविधि मनोरंजन की वजह से हो रहा है है। क्या आपने कभी अपनी गतिविधि में AndroidManifest.xml में android:configChanges="orientation|keyboardHidden|screenSize" जोड़ दिया है? , यदि आप उस ध्वज को गतिविधि में जोड़ते हैं, तो अभिविन्यास में परिवर्तन होने पर यह नष्ट नहीं होगा और टुकड़े ढेर गायब नहीं होंगे।

+0

यह बस इतना आसान लॉल, चीयर्स साथी था, जब आप कुछ सीखते हैं तो आपको यही मिलता है :) – CaptRisky

+0

** इसे पढ़ने वाले अन्य लोगों के लिए, यह एक सुरक्षित समाधान नहीं है। ** ऐसे अन्य परिदृश्य हैं जहां एंड्रॉइड मार डालेगा आपकी गतिविधि उदाहरण के लिए, जब आपके ऐप को कम किया जाता है तो अन्य संसाधन-भूखे ऐप्स का उपयोग किया जा रहा है। –

+0

@ जी। स्टेगर्ट, अगर यह केवल उन्मुखीकरण परिवर्तन के लिए है, तो यह संभवतः सुरक्षित है, जबकि गतिविधि मनोरंजन या प्रक्रिया पुनरारंभ करने के बाद राज्य को बहाल करने के लिए, यह निश्चित रूप से एक और विषय है। – jobcrazy

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

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