0

In meiner OnCreateView-Methode des Fragments rufe ich den Child Fragment Manager auf, um ein Fragment in das Layout einzufügen. Dieses untergeordnete Fragment enthält einige FloatingActionButtons.Warum sind die Felder dieses Fragments null?

Nachdem ich die Transaktion festgeschrieben habe, überprüfe ich den Inhalt meiner darunterliegenden Liste (mit einem RecyclerView), und je nachdem, ob irgendwelche Werte vorhanden sind, blende ich einige der FloatingActionButtons ein/aus.

Allerdings sagt es mir, dass die Tasten null sind! Werden bei einer Fragment-Transaktion nicht alle typischen Lebenszyklusereignisse zuerst aufgerufen? Gibt es eine Möglichkeit, es zu warten? Gibt es dafür eine bessere Praxis?

+0

Ich glaube, Sie können auch 'executePendingTransactions()' auf dem Fragment-Manager aufrufen, und der 'onCreateView()' des Fragments wird als Teil davon aufgerufen. Nicht zu sagen, das ist der beste Weg, wie in der [Dokumentation] (http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()) gewarnt, aber es könnte eine Option sein. –

+0

@GeorgeMulligan Es scheint nicht für mich zu arbeiten –

+0

Das ist wirklich ärgerlich, sollte es nicht so schwierig sein, etwas so einfach zu tun in Android –

Antwort

0

Das Commit ist nicht synchron. Es gibt keine Garantie, wenn der Lebenszyklus des Fragments ausgeführt wird.

Wenn Sie wissen möchten, wann das Fragment "bereit" ist, implementieren Sie einen Rückruf vom Fragment zur Hosting-Aktivität und lassen Sie es wissen.

class CustomB extends CustomA { 
    interface Listener { 
    void onViewCreated(); 
    } 

    public View onCreateView() { 
    View v = super.onCreateView(); 

    if (getActivity() instanceof Listener) { 
     ((Listener)getActivity()).onViewCreated(); 
    } 

    return v; 
    } 
} 

Im Allgemeinen sollten Sie versuchen, Ihre Fragmente so zu gestalten, dass sie in sich abgeschlossen sind. Wenn das Fragment fest an die Aktivität gebunden ist, sollten Sie stattdessen die Funktionalität als benutzerdefinierte View implementieren.

+0

Das Fragment mit den FloatingActionButtons wird an verschiedenen Stellen in der App verwendet, weshalb ich es zu einem Fragment gemacht habe. Da es in diesem einen Fall an die Aktivität gebunden ist, würde ich es stattdessen erweitern? –

+0

Wenn Sie das Originalfragment nicht modifizieren können, ja, können Sie einfach die Funktionalität, die ich oben geschrieben habe, durch die Erweiterung hinzufügen. –