Screen Rotate Problem in FragmentActivity


#1

Ich habe das Problem wenn ich die Scree Rotation ändere, dass in meiner FragmentActivity die onCreate()-Methode ausgeführt wird. In der OnCreate()-Methode erstelle ich die Instanzen von meinen Fragmenten und von meinem FragmentStatePagerAdapter.
Wenn also die Screen Rotation sich ändert und die onCreate()-Methode in der FragmentActivity ausgeführt wird, habe ich die falschen Instanzen von meinen Fragmenten und vom FragmentStatePageAdapter…

{
  private ViewPager viewPagerTab;

  private TabPagerAdapter tabAdapter;

  private ActionBar actionBar;


  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Initilization
    initPaging(); //Wird beim Orientierungswechsel aufgerufen...

  }

 private void initPaging()
  {
      List<Fragment> fragments = new Vector<Fragment>();

      fragments.add(Fragment.instantiate(this, TreeFragment.class.getName()));
      fragments.add(Fragment.instantiate(this, MonitorFragment1.class.getName()));
      fragments.add(Fragment.instantiate(this, MonitorFragment2.class.getName()));
      fragments.add(Fragment.instantiate(this, StatusmeldungFragment.class.getName()));

    viewPagerTab = (ViewPager) findViewById(R.id.pager);
    viewPagerTab.setOnPageChangeListener(getOnPageChangeListener());
    tabAdapter = new TabPagerAdapter(getSupportFragmentManager(), fragments);
    viewPagerTab.setAdapter(tabAdapter);
    viewPagerTab.setOffscreenPageLimit(3);

    actionBar = getActionBar();
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    // Tabs in die ActionBar hinzufuegen.
    String[] tabs = {"Baum", "Monitor1", "Monitor2", "Status"};
    for (String tab_name : tabs)
    {
      actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
    }

  }

...

}```

Kann mir einer weiterhelfen um das Problem zu lösen?

#2

kleinlaut, weil kein Android-Experte Wäre es naiv, die Methode mit einem [inline]if (viewPagerTab!=null) return;[/inline] anfangen zu lassen? :o


#3

Was bedeutet falsche Instanzen? Du hast neue - da sich die Activity neu aufbaut. Hört sich für mich so an, als ob dein Problem damit ist, dass du Informationen verlierst. Deswegen solltest du die onSaveInstanceState überschreiben. Die Werte die du dort im übergebenen Bundle hinterlegst, solltest du über die onCreate wieder bekommen. Die Views (mit ID!) sollten btw ihren Zustand out-of-the-box speichern und dir wieder anzeigen.

*** Edit ***

[QUOTE=Marco13;89585]kleinlaut, weil kein Android-Experte Wäre es naiv, die Methode mit einem [inline]if (viewPagerTab!=null) return;[/inline] anfangen zu lassen? :o[/QUOTE]

Jup. In dem Fall stimmt die Maske nicht und das sollte auf jeden Fall einen Fehler produzieren.


#4

Ich habe eine andere Lösung gefunden.
Habe in die AndroidManifest.xml bei der MainActivity das Attributandroid:configChanges="orientation|screenSize" eingefügt, damit verhindere ich das die Activity neugestartet wird beim wechseln der Rotation…