2017-04-23 5 views
1

Ich habe eine ViewPager, die Fragment s hält. ViewPager hat einen Adapter von FragmentStatePagerAdapterViewPager - FragmentStatePagerAdapter und Handhabung Rotation

Adapter getItem Methode.

@Override 
public Fragment getItem(int position) { 
    String text= dbHelper.getText(position); 
    CustomFragment frg = new CustomFragment(text); 
    return frg; 
} 

Ich Initialisierung des Fragments in der getItem Methode des Adapters.

Alles funktioniert perfekt.

Wenn sich die Ausrichtung jedoch ändert, werden die ursprünglichen CustomFragment s mit dem Standardkonstruktor CustomFragment erstellt. Dies erzeugt Fragmente mit Dummy-Daten.

Was ist der Grund dafür? Wie kann ich die zuvor erstellten Fragmente wiederherstellen?

Antwort

1

Der ideale Weg, um Ihre Fragment s zu initialisieren ist eine Factory-Methode wie zu erstellen:

public static CustomFragment newInstance(String text) { 
    Bundle arguments = new Bundle(); 
    arguments.put("someText", text); 

    CustomFragment fragment = new CustomFragment(); 
    fragment.setArguments(arguments); 

    return fragment; 
} 

und erhalten die Argumente mit im onCreate() Verfahren und verarbeiten sie, was Sie in dem Fragment wollen zu initialisieren.

Auf diese Weise, wenn Ihre Fragmente bei einer Konfigurationsänderung neu erstellt werden, bleiben die Argumente erhalten und die Fragment s kümmern sich selbst, wenn ihre onCreate() Methode aufgerufen wird.

Möglicherweise haben Sie die Warnhinweise zum Flusen bemerkt, wenn Sie die neuesten Tools verwenden.

+0

@ salih-erikci Haben Sie es versucht? –

+1

Ja, ich habe deine Methode benutzt und es hat funktioniert. Wie Sie sagten, muss dies der ideale und empfohlene Weg sein, um Fragmente zu initialisieren. Vielen Dank –

Verwandte Themen