Попытка вызвать виртуальный метод 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' в ссылке на нулевой объект

Мое приложение состоит из 4 фрагментов в качестве вкладок, загружаемых внутри родительского фрагмента с использованием FragmentPagerAdapter .

Проблема в том, что когда я запускаю приложение и отжимаю и снова открываю приложение, я получаю этот журнал ошибок:

 FATAL EXCEPTION: main java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:1949) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1965) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:513) ... 

Строка кода внутри родительского фрагмента:

 viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); 

И ViewPage и Adapter оба не являются нулевыми!

Я должен упомянуть, что весь жизненный цикл моего Fragment управляется, и нулевая проблема происходит внутри адаптера !, и тот же Adapter работает нормально, когда я использую Activity как parent вместо Fragment !!!

Solutions Collecting From Web of "Попытка вызвать виртуальный метод 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' в ссылке на нулевой объект"

После много исследований, похоже, что это проблема с библиотекой поддержки:

Активность с фрагментом и ViewPager crashesh при изменении конфигурации
Проблема с поддержкой библиотеки Android 24.1.0

Я также нашел этот ответ, но выглядит необычно, добавив флаг в мой код:

Попытка вызвать виртуальный метод «android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()» на нулевом объекте

Я переопределяю метод finishUpdate моего FragmentPagerAdapter как это, и проблема решена на данный момент!

 @Override public void finishUpdate(ViewGroup container) { try{ super.finishUpdate(container); } catch (NullPointerException nullPointerException){ System.out.println("Catch the NullPointerException in FragmentPagerAdapter.finishUpdate"); } } 

Любой лучший ответ? пожалуйста, дай мне знать…

Я знаю, что может быть поздно, но вот моя глупая ошибка, которую я сразу не видел:

 @Override public void onStop() { super.onDestroy(); //I was calling the wrong super } 

У меня была та же проблема, и это было вызвано повторным использованием экземпляра ViewPager разными экземплярами фрагмента. Решением было onDestroyView() адаптер в onDestroyView() фрагмента.

 @Override public void onDestroyView() { mViewPager.setAdapter(null); super.onDestroyView(); } 

Проект, демонстрирующий проблему, и решение можно найти здесь .

Я была такая же проблема. В моем случае проблема заключалась в том, что я повторно использовал, не заметив адаптер с предыдущего открывшегося времени.

Я заглянул в класс FragmentManager.java, который отправил исключение, и на той же самой строке, которая сбой говорит: «Должен быть вызван из основного потока хоста фрагмента»,

Мой код:

 PagerAdapter adapter = MPageAdapter.getInstance(getSupportFragmentManager()); viewPager.setAdapter(adapter); 

Потому что я использовал свой PageAdapter в качестве моста для связи между фрагментами, я использовал одноэлементный шаблон. Это работало хорошо для меня, но как только я повторил эту структуру в другой деятельности, я получил то же исключение. И причина в том, что я забыл уничтожить синглтон моего адаптера в конце каждого использования.

 @Override protected void onDestroy() { MPageAdapter.Destroy(); //I forgot this one, that makes singleton = null; super.onDestroy(); }