2012-01-27 16 views
11

I View 1 FragmentActivity एक ViewPager के साथ जो 2 टुकड़े को संभालती है।एंड्रॉइड - फ्रैगमेंट स्क्रीन घुमाएं

public class MyFragmentActivity extends FragmentActivity{

private Fragment f1; private Fragment f2; private ViewPager myPager; private MyFragmentAdapter mFragmentsAdapter; private static ArrayAdapter<Fragment> mFragmentArray; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.my_layout); myViewPager = (ViewPager) findViewById(R.id.pager_acciones); mFragmentArray = new ArrayAdapter<Fragment>(getApplicationContext(),android.R.layout.simple_list_item_1); f1 = new Fragment(); f1 = new Fragment(); mFragmentArray.add(f1); mFragmentArray.add(f2); mFragmentsAdapter = new MyFragmentAdapter(getSupportFragmentManager()); myPager.setAdapter(mFragmentsAdapter); myPartidoPager.setCurrentItem(0); } public static class MyFragmentAdapter extends FragmentPagerAdapter { public AccionesFragmentAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return mFragmentArray.getCount(); } @Override public Fragment getItem(int position) { return mFragmentArray.getItem(position); } }

मेरे समस्या यह है कि हर बार स्क्रीन अभिविन्यास परिवर्तन, गतिविधि टुकड़े बनाया है और यह भी जाता है। मुझे कोई फर्क नहीं पड़ता कि गतिविधि फिर से बनाई गई है, लेकिन मैं नहीं चाहता कि टुकड़े को फिर से बनाया जाए।

+0

मुझे समाधान मिला [यहां] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state) धन्यवाद @ oneilse14 आपके लिए वैसे भी जवाब दें। – gutiory

उत्तर

0

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

+0

@ oneilse12। धन्यवाद। लेकिन एक FragmentActivity के साथ RetainNonConfigurationInstance विधि पर ओवरराइड करना संभव नहीं है। – gutiory

13

सबसे आसान तरीका if स्टेटमेंट को फेंकने के बाद सही तरीके से फेंकना है और यह देखने के लिए जांचें कि क्या आपके पास पहले से कुछ है या नहीं। यदि savedInstanceState रिक्त नहीं है, तो आप कुछ करने की ज़रूरत नहीं है: कारण वे समझ नहीं क्यों टुकड़े हो हर बार फिर से जोड़ा

if (savedInstanceState == null){ 
    // do whatever 
} else { 
    // dont do anything 
} 

(क्या यह उत्तर लोगों की है कि इस सवाल का पर आते हैं के लिए और अधिक है वे अपने डिवाइस को चालू करें)

2

आप जोड़ सकते हैं: android:configChanges="screenSize|orientation" AndroidManifest.xml में।

यह स्क्रीन अभिविन्यास परिवर्तन पर एंड्रॉइड को onCreate पर कॉल करने से रोक देगा। यदि आप अभिविन्यास परिवर्तन के विशेष संचालन करना चाहते हैं, तो आप onConfigurationChanges ओवरराइड कर सकते हैं।

+8

विश्वास नहीं कर सकता कि ये उत्तर अभी भी पोस्ट किए गए हैं। बेहतर इसे देखें: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy