Bringe das Fragment nach vorne (keine Fragmentwiederherstellung)
Habe ich drei Fragmente F1, F2, F3, F4 sind alle zugänglich von der sidebar.
alle vier können jederzeit genannt werden und in beliebiger Reihenfolge,
Jetzt möchte ich wenn die F1 ist schon geklickt(erstellt), dann nie wieder F1, aber nur zurück zu bringen-fragment F1 nach vorne mit fragment-manager. Dasselbe für alle anderen fragment
Bisher ich habe versucht, das für jedes fragment in meinem container (FRAGMENT-AKTIVITÄT)
if (fragmentManager.findFragmentByTag("apps")==null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment newFragment = new CategoriesFragment();
transaction.replace(R.id.content_frame, newFragment, "apps");
transaction.addToBackStack("apps");
transaction.commit();
} else{
}
If
Teil sorgt für mich KEIN fragment ist neu (Wenn Ihr bereits erstellt) wieder, aber was soll ich schreiben in else
Teil, so dass bereits erstellte fragment gebracht werden kann, um vorne in der View-Hierarchie
Bitte Helfen, ich bin stecken geblieben auf diese für 2 Tage.
InformationsquelleAutor der Frage Nitin Misra | 2013-12-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde diesen code in der activity-Klasse, dass muss FrameLayout mit id R. id.fragment_container.
Und fügen Sie diese für den button-Klick:
Auf den button klicken(s) man kann zeigen, dass das fragment, das Sie wollen, und andere ausblenden.
HINWEIS (@developer1011):
Für den Einsatz nach Aktivität Zustand speichern Anruf
commitAllowingStateLoss ()
. Verwenden Sie mit Vorsicht, weil das fragment nicht wiederhergestellt werden, mit der Aktivität der Restaurierung.HINWEIS:
MainActivity implementieren sollte OnFragmentInteractionListener für jedes Fragment.
InformationsquelleAutor der Antwort Solata
Bekommen das fragment von tag und ersetzen Sie es in den container,
UPDATE:
Sie können anzeigen und ausblenden von fragment zu vermeiden Erholung.statt "Transaktion.ersetzen()"
InformationsquelleAutor der Antwort nikvs
Verwenden Sie einen einfachen
ArrayList<Fragment>
für Ihre Fragmente, und fügen Sie Sie in der Reihenfolge, so dass Sie wissen, (0) F1, get(1) wird die F2-Taste, etc.Erstellen der Fragmente als singletons. In jedem fragment, fügen Sie ein statisches Feld und Methode:
Erstellen der Fragmente mit der statischen Methode, und fügen Sie Sie zur ArrayList.
In jedem Fragment hinzufügen
setRetainInstance(true);
Befehl, um die onCreate () - Methode.Nun, wenn Sie fügen Sie das Fragment mit der FragmentManager,
onCreate()
wird nur aufgerufen werden, das erste mal, aberonCreateView()
wird jedesmal aufgerufen, wenn. Sie möchten aufblasen, um den Blick und verbinden Sie die widgets jedes mal, nur en Fall, dass Ihre Aktivität neu erstellt habe, weil von einer änderung der Konfiguration. Aber Sie können etwas, was Sie hinzufügen, um zu sehen, ob es das erste mal ist oder nicht, und setzen Sie die widgets, um den vorherigen Zustand, wenn nicht. Also, werden Sie brauchen member-Variablen in Ihre Fragmente zu behalten Ihren Status bei. Überschreiben onStop() Status zu speichern, und erneut in der onCreateView() nach der Verkabelung der widgets.Dann, wenn die sidebar-button gedrückt wird, erhalten Sie das Fragment, das entspricht Taste, entfernen Sie die alte Fragment, und fügen Sie das aktuelle mit den FragmentManager (oder eben verwenden Sie die replace () - Befehl anstelle des remov()/add()).
InformationsquelleAutor der Antwort Rick Falck
Wenn Sie mit der Support-Fragment, dann ist diese statische Methode macht den job.
InformationsquelleAutor der Antwort JDenais
Wenn Sie nur versuchen, hinzufügen, ein
Fragment
ohne sich sorgen darüber zu machen, neu zu erstellen, dann denke ich, diese Methode habe ich schrieb Sie auf hinzufügenFragment
tun Sie Arbeit.InformationsquelleAutor der Antwort learningmechine