2016-08-19 3 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() = это и восстановить проект –

+0

ваш getContext становится возвращением нуля. –

+1

Thx для справки, но я не могу использовать «это» внутри моего фрагмента, поэтому я использовал 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. Попробуйте что-то вроде этого:

Смежные вопросы