Nullpointerexception bei wecheln des Ausrichtungsformates mit dem ViewPager

  • 7 Antworten
  • Letztes Antwortdatum
O

Oli95

Neues Mitglied
0
Hallo,

ich habe eine Activity die Tabs beinhaltet. Das wird mit dem ViewPager gemacht der die Fragmente managed.

In meinem Fragment wird im Konstruktor ein Objekt anhand von den übergebenen Parametern erstellt.
In der Methode onCreateView wird das Objekt dann benötigt.
Mir ist aber aufgefallen dass wenn ich zb. von Hoch auf Qerformat wechsel ab und zu die onCreateView vor dem Konstruktor aufgerufen wird.

Wie kann ich das verhindern?

Liebe Grüße
 
Best practice für ein Fragment ist, das mit einer statischen Methode zu bauen und die benötigten Parameter nicht im Konstruktor (bei configChanges wird nur der Default Constructor gecallt) mitzugeben sondern per arguments Bundle.

Hier ein schönes Beispiel:
https://stackoverflow.com/a/9245510/1768839
 
Hallo eigentlich ist es so das wenn das Handy gedreht wird meistens auch die Aktivitäten das Fragment neu gestartet. Das Objekt Wiedergründung neu erstellt deshalb wird der konstructor auch nicht aufgerufen. Wie du richtig bemerkt hast wird dabei die onCreateview ausgerufen weil meistens das layouten geladen werden muss.

schaue dir mal die saveinstancestate Methode an die wird normalerweise vor den drehen aufgerufen.
Dort!kannst du deinen Zustand sichern und in der onrestoreinstancestate wider abfragen.
 
Danke @deek das war die Lösung. Da wird jedesmal der Default Konstruktor aufgefufen und deshalb stürzt es ab.
[doublepost=1554126122,1554124601][/doublepost]Ein weiteres Problem ist jetzt aber aufgetreten.
Die titel der Tabs sind auch Parameterabhängig. Die sind jetzt natürlich immer leer weil die Methode getPageTitle im FragmentPagerAdapter früher aufgerufen wird.
Gäbe es dafür auch ne Lösung?
 
Dazu müsste man mal deinen Adapter sehen. Wo bekommt der denn die Titel her aktuell?
 
Also im Adapter hab ich die Methode public CharSequence getPageTitle(int position). Die Methode gibts auch in der Klasse FragmentPagerAdapter und wird von meiner Überschrieben. Die Methode holt sich dann das jeweilige Fragment.
Das ist vom Adapter.
Code:
@Override
    public CharSequence getPageTitle(int position) {
        return getItem(position).getPageTitle();
    }

und im Fragment sieht das dann so aus.
Code:
public String getPageTitle() {
        if (meinObjekt != null) {
            return meinObjekt.getToolbarTitle();
        }
        return "";
    }

Das Objekt wird dann in der onCreateView erstellt.
 
du darfst getItem nicht selbst aufrufen. Das was du in getItem zurück gibst ist nicht zwingend die Fragment Instanz die auch angezeigt wird.
Beim Drehen wird das Fragment vom FragmentManager erstellt und deshalb ist deine Instanz nicht den Lifecycle durchlaufen.

Da ich jetzt deinen Rest Code nicht kenne, kann ich dir nicht genau sagen wie du es machen kannst. Ich nehme an du wirst nicht drumrum kommen die title im Adapter schon zu "berechnen", unabhängig vom state des Fragment.
 
Ok wenn der Adapter das erzeugt funktioniert es.

Vielen Dank für die Hilfe.
 

Ähnliche Themen

J
Antworten
5
Aufrufe
306
swa00
swa00
Tiefkuehlpizza
Antworten
2
Aufrufe
1.049
Tiefkuehlpizza
Tiefkuehlpizza
D
Antworten
17
Aufrufe
751
datNeMo
D
Zurück
Oben Unten