Fragment orientationchange onCreateView und onStart

  • Antworten:7
Markus B.
  • Forum-Beiträge: 636

14.05.2014, 23:18:40 via Website

Hallo zusammen,
ich brauche mal etwas Unterstützung.
Ich habe ein Fragment, welches beim Orientationchange die aktuelle Viewpager Position in das Bundle vom Fragment schreibt:

@Override
public void onSaveInstanceState (Bundle outState)
{
    super.onSaveInstanceState(outState);
    outState.putInt(VIEWPAGER_ITEM, _viewpager.getCurrentItem());
    Log.i(TAG, "onSaveInstanceState() : " + _viewpager.getCurrentItem());
}

Das lese ich dann in der onCreateView()-Methode wieder aus:

//Klassenvariabel zum Halten des letzten Viewpager item
private int _lastPage = 0;

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
                          Bundle savedInstanceState)
{
    if (null != savedInstanceState)
    {
        _lastPage = savedInstanceState.getInt(VIEWPAGER_ITEM);
    }

    return inflater.inflate(R.layout.fragment_slidingtabs, container, false);
}

Nun will ich in der onStart()-Methode den ViewPage per setCurrentItem(_lastPage) auf die Seite vor dem Orientationchange setzten. Nun hat die Variable _lastPage hier aber nun den Wert 0. Ich verstehe nicht warum?

@Override
public void onStart()
{
    super.onStart();
    _viewpager.setCurrentItem(_lastPage, true);
    Log.i(TAG, "onStart : " + _lastPage);
}

@Override
public void onResume()
{
     Log.i(TAG, "onResume() : " + _lastPage);     
}

Im Log kann ich folgendes sehen:

onSaveInstanceState : 2
onCreateView : 2
onStart : 0
onResume : 0

Die Ausgabe passt zu meiner Vorstellung vom Fragment lifecycle aber irgendwie blick ich meinen Fehler gerade nicht ...

Gruß,
Markus

— geändert am 15.05.2014, 09:14:09

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.05.2014, 06:55:43 via App

Am einfachsten ist es eine Klassenvariable zu erstellen und deinen Wer lt aus der oncreateView dort hineinzuschreiben.
Ob das allerdings die beste Lösung ist, bezweifle ich.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Markus B.
  • Forum-Beiträge: 636

15.05.2014, 07:35:14 via App

Hi,
also _lastPage ist schon eine Klassenvariable, welche im onCreateView gesetzt und im onStart und onRsume gelesen wird. Wüsste jetzt auch nicht was gegen dieses Vorgehen spricht.

Gruß,
Markus

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.05.2014, 13:54:41 via Website

Das passt doch dann, oder was ist dein Problem?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Markus B.
  • Forum-Beiträge: 636

15.05.2014, 14:24:18 via Website

Pascal P.

Das passt doch dann, oder was ist dein Problem?

Najo, siehe Logmeldungen:
onInstanceSave() und onCreateView() passt der Wert aber in onStart() und onResume() ist dieser 0.
Das ergibt keinen Sinn. Ich bin mir sicher das ich dort einen Fehler mache aber ich verstehe aktuell nicht wo.

Gruß

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.05.2014, 14:51:18 via Website

Du setzt ja die Letzt seite auch nur, wenn die Savedinstances nicht null sind:
if (null != savedInstanceState)
{
_lastPage = savedInstanceState.getInt(VIEWPAGER_ITEM);
}

Sonst bleibt die LastPage 0.
Wann soll den die lastPage einen Wert habem?
Wenn die Activity neu gestartet wird, oder wenn die ganze App gesartet wird?
Die App muss vorher ja schon benutzt worden sein damit die Savedinstances benutzen kannst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.05.2014, 16:22:07 via Website

Ja so müsste das eigentlich sein.
prüfe mal mit dem Debugger ob dieser in die Set Zeile kommt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten