2012-10-29 12 views
12

Ich habe in letzter Zeit viel mit Fragmenten gearbeitet und ich war nur neugierig, was die beste Vorgehensweise ist, um einen Verweis auf die Elternaktivität eines Fragments zu verwenden. Wäre es besser, getActivity() aufzurufen oder eine parentActivity-Variable für den onActivityCreated-Callback initialisiert zu haben.Best Practice, um die Elternaktivität eines Fragments zu referenzieren?

Antwort

17

Dies ist eigentlich im offiziellen Android-Dokument zu Fragmenten enthalten. Wenn Sie den Kontext der übergeordneten Aktivität (z. B. Toast, Dialog) benötigen, rufen Sie getActivity(). Wenn Sie die Callback-Methoden in der Schnittstelle des Fragments aufrufen müssen, sollten Sie eine Callback-Variable verwenden, die in onAttach(...) instanziiert wird.

public static class FragmentA extends ListFragment { 
    ExampleFragmentCallbackInterface mListener; 
    ... 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      mListener = (ExampleFragmentCallbackInterface) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() + " must implement ExampleFragmentCallbackInterface "); 
     } 
    } 
    ... 
} 

Source

+0

Die Verwendung von FragmentCallbackInterface ist meine bevorzugte Methode, dies zu implementieren. –

+0

@James: Können Sie bitte erklären, warum dieser Ansatz besser ist als getActivity()? Manchmal gibt getActivity() null zurück und die App stürzt ab. Kann man mit dem obigen Ansatz sicher sein, dass die App nicht abstürzt? Vielen Dank. – Rajat

+1

Wenn getActivity() null zurückgibt, wurden Sie noch nicht angefügt, also wäre 'mlistener' auch null. Dieser Ansatz ist besser als die Verwendung von 'getActivity()', da sichergestellt wird, dass die Aktivität, mit der Sie verbunden sind, die Schnittstelle implementiert, die für die Arbeit mit dem Inhalt im Fragment erforderlich ist. –

8

getActivity() ist am besten. Sie müssen keine Variable zum Speichern pflegen (immer, bis zum App-Zyklus!). Rufen Sie bei Bedarf die Methode auf und verwenden Sie! :)

-2

Wenn Sie in dem Fragment sind, können Sie getActivity nennen(); Wenn Sie sich im Fragment befinden, können Sie auch getApplicationContext() aufrufen. GetContext(); In den meisten Fällen erledigt getActivity() alles, was Sie brauchen.

Verwandte Themen