Android fragment-Instanzen vermeiden Sie Duplikate
Hallo, ich bin nicht sicher, ob ich das richtige mache. Ich habe mehrere Fragmente in einer Aktivität gezeigt (nicht gleichzeitig). Wenn ich das fragment muss ich prüfen, ob eine Vorherige Instanz existiert? Ich bin mit dem Kompatibilitäts-Paket und mein fragment CameraFragment ist eine separate Klasse (in eigener Datei):
private void addNewFragment(Fragment fragment, String tag) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.frag1, fragment, tag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
dann :
public void startPicTaking() {
addNewFragment(CameraFragment.newInstance(), TAG_PIC_TAKING);
}
Also jedes mal, wenn ein Benutzer auf eine Schaltfläche klickt, um ein Bild zu machen verwende ich diese Methoden, ABER soll ich überprüfen, ob das fragment bereits vorhanden ist und entfernen Sie es zuerst, oder hat die statische Methode newInstance stellen Sie sicher, dass das fragment ist nicht doppelt vorhanden?
Habe ich gelesen, der doc mehrmals, aber ich verstehe nicht, warum die Zeile:
ft.addToBackStack(null);
was ist es? Ich weiß, Sie können pop die zurück-stack und es hält die Transaktion aber wie kann es eingesetzt werden und für was? Ist es notwendig oder, wenn ich nicht verwenden kann ich es überspringen?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es wird einfach eine neue Instanz erstellen, die
Fragment
wenn es fügt die nächste Instanz. Es wird nicht auf die Vorherige Instanz.Könnten Sie tun, wenn Sie wollte, um sicherzustellen, dass keine
Fragment
erscheint zweimal im stack. (Also, wenn Sie zurück schlagen, Sie erhalten nicht die gleiche Aktivität wieder.) Je nach genau das, was erscheint in Ihrem Rücken stapeln, die Sie möglicherweise nicht wollen zu entfernen, Zeug tiefer. (Bedenken Sie, dass ein Benutzer erwartet vorherigen Fragmente angezeigt, wenn er zuvor auf die Schaltfläche zurück.)Wenn
Fragment
Objekte Hinzugefügt werden, wieder stapeln, dann jedes mal, wenn der user schlägt zurück, gehen Sie zu dem vorherigen Element auf dem stack. Wenn Sie nicht fügen Sie ein Element auf dem stack zurück, das Benutzer stoßen, wenn Sie die Schaltfläche " zurück.replace()
ist, wird es zerstört werden.