2016-08-19 11 views
5

Meine Apps stürzen manchmal ab, wenn ich das Fragment mit dem navigationDrawer ändere. Der fatale Fehler hilft nicht viel, Wie kann ich dieses Problem lösen? ThxWarum stürzt meine App ab, wenn ich Fragmente schnell vertausche?

FATAL EXCEPTION: main 
    Process: acr.acr_app, PID: 29425 
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 
    at android.view.ViewConfiguration.get(ViewConfiguration.java:359) 
    at android.view.View.<init>(View.java:3656) 
    at android.view.View.<init>(View.java:3751) 
    at android.view.ViewGroup.<init>(ViewGroup.java:492) 
    at android.widget.LinearLayout.<init>(LinearLayout.java:200) 
    at android.widget.LinearLayout.<init>(LinearLayout.java:196) 
    at android.widget.LinearLayout.<init>(LinearLayout.java:192) 
    at android.widget.LinearLayout.<init>(LinearLayout.java:188) 
    at android.widget.TableRow.<init>(TableRow.java:61) 
    at acr.acr_app.MyFragment3$2.onChildAdded(MyFragment3.java:170) 
    at com.google.android.gms.internal.zzaer.zza(Unknown Source) 
    at com.google.android.gms.internal.zzagp.zzSu(Unknown Source) 
    at com.google.android.gms.internal.zzags$1.run(Unknown Source) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 

Fragment3 line170: onStart() Zuhörer

tableRow = new TableRow(getContext()); 
    tableRow.setLayoutParams(new TableLayout.LayoutParams(
    TableLayout.LayoutParams.WRAP_CONTENT, 
    TableLayout.LayoutParams.WRAP_CONTENT, 1.0f)); 
+0

try Änderung getContext() = Dies und Projekt neu –

+0

Ihr getContext ist null immer wiederkommen. –

+1

Thx für die Hilfe, aber ich kann nicht "this" in meinem Fragment verwenden, deshalb habe ich getContext() verwendet. Gibt es eine andere Lösung mit onAttach/onDetach-Methode? – Xaloju

Antwort

4

Der Grund für diesen Absturz ist, dass das Fragment noch Code ausgeführt wird, während es bereits von Ihrer Aktivität abgenommen wird.

In Ihrem Fall ist das Fragment bereits auf ein anderes Fragment umgeschaltet, wenn es die getContext() erreicht. Da getContext() nach der Aktivität sucht (an der das Fragment nicht mehr hängt), wird eine Nullpointer-Ausnahme ausgelöst.

Versuchen Sie Folgendes:

if(isAdded()){ 
    tableRow = new TableRow(getContext()); 
    tableRow.setLayoutParams(new TableLayout.LayoutParams(
    TableLayout.LayoutParams.WRAP_CONTENT, 
    TableLayout.LayoutParams.WRAP_CONTENT, 1.0f)); 
} 
+0

Das hat gut funktioniert! Es stürzt nicht mehr ab, aber ich brauche mehr Tests, um sicher zu gehen. Vielen Dank. – Xaloju

0

Was Ihr Fragments ist Arbeitsmodus von fragmentManager? Ist es :replace oder showhide? Es wird abstürzen, wenn Sie schnell wechseln, weil Ihr Fragment die Initialisierung nicht abgeschlossen hat, wenn es an FragmentActivity anhängt. so etwas wie dies versucht:

Verwandte Themen