So erhalten Sie ein Anwendungsobjekt in die Fragmentklasse
Lesezeit: 2 Minuten
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()
Du musst ein bisschen mehr Code-Snippet posten. Danke 🙂
– Salman
20. Juli 2012 um 19:25 Uhr