So erhalten Sie ein Anwendungsobjekt in die Fragmentklasse

Lesezeit: 2 Minuten

Benutzer-Avatar
Rakesh Gourineni

Ich ändere meine mobile Android-App, um sowohl Tablets als auch Mobiltelefone zu unterstützen. Dazu ändere ich meine Aktivitätsklasse in Fragment. In meiner Aktivitätsklasse habe ich eine Instanz meiner Anwendungsklasse wie folgt erstellt:

appCtx = (UnityMobileApp) getApplication();

Wo UnityMobileApp ist meine Anwendungsklasse.

Jetzt möchte ich dieselbe Instanz in meiner Fragmentklasse erstellen. Könnt ihr mir bitte helfen, das zu lösen?

  • Du musst ein bisschen mehr Code-Snippet posten. Danke 🙂

    – Salman

    20. Juli 2012 um 19:25 Uhr

Verwenden appCtx = (UnityMobileApp) getActivity().getApplication(); in deinem Fragment.

  • Bitte beachten Sie, dass in einigen Fällen der obige Code NPE auslöst, da er in einer Situation aufgerufen werden kann, in der getActivity() wird null zurückgeben (z. B. in der Mitte der Rotation zum Beispiel)

    – Ognian

    21. Juli 2013 um 10:34 Uhr

  • Verwenden Sie es in: @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); app = ((MyApplication) getActivity().getApplication()); }

    – Dzianis Yafimau

    13. Februar 2015 um 21:19 Uhr


Die Methode getActivity() kann die Möglichkeit haben, null zurückzugeben. Dies kann Ihre App zum Absturz bringen. Es ist also sicher, diese Methode innerhalb von zu verwenden onActivityCreated(). Z.B:

private UnityMobileApp appCtx;
.
.
...
@Override
public View onCreateView(...){
...
}

@Override public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     appCtx = ((UnityMobileApp) getActivity().getApplication()); 
} 
...
//access the application class methods using the object appCtx....

Diese Antwort leitet sich aus der Antwort von Dzianis Yafima ab, die Ognyan in Kommentaren gestellt hat. Damit geht der Kredit zu Dzianis Yafimas und Ognjan im Stapelüberlauf.

Falls jemand nach einer Kotlin-Version sucht. Das funktioniert bei mir:

(activity?.application as YourApplicationClass)

Wenn Sie versuchen, den Anwendungskontext aus einem Fragment zu verwenden, das Sie nicht verwenden können getApplication() weil das keine Methode der Fragment-Klasse ist
Sie müssen also zuerst die verwenden getActivity() die eine Fragmentaktivität zurückgibt, der das Fragment derzeit zugeordnet ist.

um in Ihrem Code zusammenzufassen,

Anstatt von this.getApplication() musst du verwenden getActivity.getApplication()

mehr darüber wissen getActivity() aus Android-Dokumentation

Benutzer-Avatar
Alex Nolasco

Alternativ mit Kotlin

fun bar() {
   (activity?.application as UnityMobileApp).let {
      it.drink()
   } ?: run {
      Log.d("DEBUG", "(╯°□°)╯︵ ┻━┻")
   }
}

Benutzer-Avatar
hat

Ein neuerer Weg:

Application application = requireActivity().getApplication();

1206020cookie-checkSo erhalten Sie ein Anwendungsobjekt in die Fragmentklasse

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy