findFragmentById() und findFragmentByTag()
Erstellte ich ein Fragment, um meine recycler anzeigen. also habe ich die Methode findFragmentById() zu finden, meine xml-Datei. Das problem ist, jedes mal, wenn ich drehte die Leinwand, er schuf eine mehr recycler anzeigen stapeln übereinander.
hier ist mein code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListFragment savedFragment = (ListFragment) getSupportFragmentManager().findFragmentById(R.id.list_recyclerview);
if(savedFragment == null)
{
ListFragment fragment = new ListFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.place_holder,fragment);
fragmentTransaction.commit();
}
}
Aber wenn ich die Methode findFragmentByTag () es nicht passiert ist.
Kann jemand mir erklären was der Unterschied zwischen diesen 2 Methoden?
Sie sind durch das hinzufügen Ihres fragment in die Ansicht mit der id
es ist mein großer Fehler. ich danke Ihnen so sehr für Ihre Hilfe.
place_holder
, so dass Sie Aussehen sollte es mit getSupportFragmentManager().findFragmentById(R.id.place_holder);
. Diese Diskrepanz erklärt, warum findFragmentById
ist nie zu finden Ihr bestehendes fragment.es ist mein großer Fehler. ich danke Ihnen so sehr für Ihre Hilfe.
InformationsquelleAutor Luan Si Ho | 2017-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Methoden ermöglichen es Ihnen, zum abrufen eines zuvor hinzugefügten fragment-Instanz zu, ohne zu halten eine Referenz auf das fragment-Instanz. Der Unterschied zwischen den beiden liegen auf dem Weg, die Sie verfolgen, wenn Ihr entweder mit einem bestimmten TAG, das Sie zuvor zugewiesen fragment Transaktion, wenn es Hinzugefügt wurde, oder einfach nur durch das abrufen der zuletzt hinzugefügten fragment in den angegebenen container. Wir gehen durch beide Methoden:
findFragmentByTag:
Diese Methode ermöglicht das abrufen der Instanz ein, die Sie zuvor Hinzugefügt fragment mit den angegebenen Tags, unabhängig von dem container Hinzugefügt wurde. Dies geschieht auf folgende Weise:
Lassen Sie uns zunächst ein fragment mit einem TAG:
Und dann zum abrufen der fragment-Instanz:
Wenn
fragment
ist nicht null, es heißt, Sie habe die Instanz verweisen auf die fragment-TAG. Beachten Sie, dass mit dieser Methode, auch tho Sie erhalten die Instanz, bedeutet nicht, dass das fragment sichtbar ist oder zum container Hinzugefügt, was bedeutet, sollten Sie eine zusätzliche Kontrolle, wenn du meinst, um mit etwas im Blick, mit:findFragmentById:
In dieser Methode, die Sie gehen, um die Instanz des zuletzt hinzugefügten fragment zu den angegebenen container. Also lasst uns so tun, fügen wir ein fragment der container ohne tag (beachten Sie, dass Sie können auch geben es einen tag und rufen Sie es auf diese Weise):
Und dann, um es abzurufen Instanz verwenden Sie die container-id:
In diesem moment, da wir verwendet
findFragmentById
wir wissen, es ist das sichtbare fragment der container, so dass Sie nicht brauchen, um zu überprüfen, ob es ist die einem container Hinzugefügt.Froh zu helfen. Wenn es dein problem gelöst markiere die Antwort als korrekt
wenn ich finden-fragment von tag auf Ansicht erstellen " für das fragment? einmal ermittelt werden?
Nein, Sie bekommen nur die fragment-Instanz. Wenn Sie es hinzufügen, um die onCreateView container aufgerufen werden
InformationsquelleAutor Ricardo