Попытка удалить fragment из представления дает мне NullPointerException на mNextAnim

У меня есть 3 fragmentа, один NavigationDrawer, один MapFragment и один пользовательский «MapInfoFragment». Я хочу, чтобы «MapInfoFragment» казался полупрозрачным поверх вершины MapFragment на определенных событиях и исчезал на других. Мне все равно, полностью ли удаляю fragment и каждый раз создаю новый, или просто меняю видимость и отображаемую информацию. В настоящее время я просто пытаюсь использовать функцию .hide () FragmentManager, но я также пробовал .remove и .detach с аналогичными результатами.

Ошибка:

03-18 14:28:10.965 24711-24711/com.[packageName].asTest D/AndroidRuntime﹕ Shutting down VM 03-18 14:28:10.965 24711-24711/com.[packageName].asTest E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.[packageName].asTest, PID: 24711 java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference at android.app.BackStackRecord.run(BackStackRecord.java:658) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 

Activity_main.xml:

         

Код нарушения:

 FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.hide(getFragmentManager().findFragmentById(R.id.map_info)); ft.commit(); 

Обновление 1

Я изменил map_info_layout на map_info и никаких изменений в ошибке я не получаю. Ранее у map_info_layout был map_info_layout определяемый как идентификатор корневого FrameLayout макета xml MapInfoFragment, поэтому я думаю, что map_info_layout и map_info указывали на одно и то же.

Обновление 2: Мое решение

Оказалось, что у меня MapInfoFragment расширяется MapInfoFragment android.support.v4.app.Fragment вместо android.app.Fragment и я использовал android.app.FragmentTransaction вместо android.support.v4.app.FragmentTransaction . Переключил все на android.app. так как я не заинтересован в более старой совместимости устройств. Спасибо Fllo.

Обновление 3: Общее решение

Не пытайтесь скрыть нулевые объекты

Я знаю, что вы решили это самостоятельно, но я хочу объяснить, как эта ошибка происходит, поскольку это произошло со мной.

В основном вы вызываете hide() , remove() и т. Д. С нулевым значением.

Ошибка не очевидна, и трассировка стека не возникает из ваших собственных источников, когда это происходит, поэтому нетрудно понять, что это такое.

Это также происходит, когда вы вызываете FragmentManager.popBackstack() не имея fragmentа в backstack.

это потому, что вы добавляете или показываете или скрываете fragment, который теперь равен null, попробуйте проверить, является ли оно нулевым, прежде чем вы его используете!

Моя проблема заключалась в том, что getFragments () FragmentManager иногда возвращает список, в котором некоторые fragmentы являются нулевыми, и я удалял эти нулевые fragmentы.

Это случилось со мной только тогда, когда из одного из fragmentов в ящике навигации я показал DialogFragment, используя

 newFragment.show(getFragmentManager(), "dialog"); 

Если вместо этого я использовал

 newFragment.show(getChildFragmentManager(), "dialog"); 

этого не произошло.

ПРИМЕЧАНИЕ. Сбой не произошел со мной при показе или закрытии диалога, но при смене на другой fragment из навигационного ящика.

Правильно вызовите show () и hide () …

  private void showFragment(int fragmentIndex, boolean addToBackStack) { FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); for (int i = 0; i < fragments.length; i++) { if (i == fragmentIndex) { transaction.show(fragments[i]); } else { transaction.hide(fragments[i]); } } if (addToBackStack) { transaction.addToBackStack(null); } transaction.commit(); } 
  • Как реализовать drag and drop для Android маркера?
  • Изменение размеров макетов программным способом (как анимация)
  • Как определить, когда телефон отвечает или отклонен
  • Воспроизведение видео в VideoView на Android
  • Фрагмент Карт Google, возвращающий нуль внутри fragmentа
  • Ошибка раздувания при расширении classа
  • Android WIFI Как обнаружить, когда доступно специальное WIFI-соединение
  • Android Studio говорит, что «невозможно разрешить символ», но компилирует проект
  • Как получить координаты экрана с маркера в google maps v2 android
  • Как подключить внешний IP-адрес от Java Android
  • REQUEST_DENIED с помощью ключа браузера Google Адреса или приложения?
  • Давайте будем гением компьютера.