2016-08-19 13 views
5

navigationDrawerでフラグメントを変更すると、アプリケーションがクラッシュすることがあります。 致命的なエラーはあまり役に立たない、どうすればこの問題を解決できますか? THXフラグメントを高速に切り替えると、アプリがクラッシュする

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()リスナー

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

トライ変更のgetContext()=これとあなたのgetContextがnullを返すとなってきている –

+0

プロジェクトを再構築します。

は、以下のことを試してみてください。 –

+1

Thxが助けになりましたが、私のフラグメントの中で "this"を使うことはできません。そのため、私はgetContext()を使いました。 onAttach/onDetachメソッドを使用する別のソリューションがありますか? – Xaloju

答えて

4

このクラッシュの理由は、それがすでに活動から切り離されている間の断片は、まだコードを実行されていることである。このような何かを試してみてください。

getContext()に達すると、フラグメントは既に別のフラグメントに切り替えられています。 getContext()はアクティビティ(フラグメントがもはやアタッチされていない)を探しているため、nullpointer例外が発生します。

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

これはうまくいった!もうクラッシュすることはありませんが、確かめるためにはさらにテストが必要です。ありがとう。 – Xaloju

0

fragmentManagerのあなたのフラグメントの作業モードとは何ですか?それは:replaceまたはshowhideですか?フラグメントがFragmentActivityにアタッチされたときに初期化が完了していないため、高速に切り替えるとクラッシュします。

関連する問題