2016-08-19 27 views
5

Moje aplikacje czasami się zawieszają, gdy zmieniam fragment za pomocą nawigacjiDrawer. Błąd krytyczny nie pomaga zbyt wiele, Jak mogę rozwiązać ten problem? ThxDlaczego moja aplikacja ulega awarii podczas szybkiego przełączania fragmentów?

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() słuchacz

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

przesiadkÄ getContext() = Ten projekt –

+0

i odbudować swoją getContext staje powrocie zerowy. –

+1

Thx za pomoc, ale nie mogę użyć "this" wewnątrz mojego fragmentu, dlatego użyłem getContext(). Czy istnieje inne rozwiązanie przy użyciu metody onAttach/onDetach? – Xaloju

Odpowiedz

4

Przyczyną tej katastrofy jest to, że fragment jest nadal wykonywanie kodu, gdy jest już odłączony od swojej działalności.

W twoim przypadku Fragment jest już zamieniony na inny Fragment po osiągnięciu getContext(). Ponieważ getContext() szuka działania (którego fragment nie jest już dołączony) spowoduje wyjątek nullpointer.

Spróbuj wykonać następujące czynności:

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

To działało bez zarzutu! To się już nie psuje, ale potrzebuję więcej testów, żeby się upewnić. Dzięki. – Xaloju

0

Jaki jest tryb pracy Twojego fragment z dnia fragmentManager? Czy to jest :replace lub showhide? Spowoduje to awarię, jeśli szybko się przełączysz, ponieważ Twój fragment nie zakończył inicjalizacji po podłączeniu do FragmentActivity. Spróbuj czegoś takiego: