2012-01-27 23 views
11

Mam 1 FragmentActivity z ViewPager, który obsługuje 2 Fragmenty.Android - Obrót ekranu fragmentu

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); } }

Moim problemem jest to, że za każdym razem zmiany orientacji ekranu, aktywność jest tworzony, a także fragmenty. Nie przeszkadza mi, jeśli aktywność zostanie utworzona ponownie, ale nie chcę, aby Fragmenty zostały odtworzone.

+0

Znalazłem rozwiązanie [tutaj] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-right-way-to-store-fragments-state) Dzięki @ oneilse14 dla twojej odpowiedz mimo to. – gutiory

Odpowiedz

0

Zapisz swój FragmentAdapter w onSaveInstanceState i zwróć go do działania po zmianie konfiguracji za pomocą onRetainNonConfigurationInstance, aby fragmenty zachowały zmianę orientacji.

+0

@ oneilse12. Dziękuję Ci. Ale z FragmentActivity nie można przesłonić metody OnRetainNonConfigurationInstance. – gutiory

13

Najprostszym sposobem jest wyrzucenie instrukcji if zaraz po wywołaniu metody on create i sprawdzenie, czy coś już tam jest. Jeśli savedInstanceState nie jest pusty, nie trzeba robić nic:

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

(ta odpowiedź jest bardziej dla osób, które natknąć się na to pytanie bo oni nie mogą zrozumieć, dlaczego fragmenty się ponownie dodany za każdym razem włączyć urządzenie)

2

Można dodać: android:configChanges="screenSize|orientation" W AndroidManifest.xml.

Uniemożliwi to wywoływanie Androida onCreate przy zmianie orientacji ekranu. Jeśli chcesz wykonać specjalną obsługę zmiany orientacji, możesz zastąpić onConfigurationChanges.

+8

Nie mogę uwierzyć, że te odpowiedzi są nadal publikowane tutaj. Lepiej spójrz na to: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy

Powiązane problemy