Intereting Posts
Как установить только числовое значение для EditTextPreference в android? Включить клавиатуру электронной почты в android для ввода типа электронной почты Отладка устройства Android через Bluetooth Постоянное сохранение данных в android Android на закрытом приемнике ящика Android: Поведение launchMode = "singleTask" не так, как описано? Нажатие на значок приложения не вызывает onOptionsItemSelected () Установить реферер, не работающий на некоторых устройствах redmi Строка состояния Android, прокручивающаяся с раскладкой координатора, оставляя значки состояния, перекрывающие заголовок панели инструментов Как установить цвет текста в текстовое представление программно Андроидная студия «Использовать градирную обертку» выделена серым цветом InputMethodManager содержит ссылку на tabhost – Memory Leak – OOM Error Android Studio 0.3.1, appcompat-v7 и проект библиотеки Android всегда генерируют IllegalStateException Установите разрешение «разрешить» по умолчанию в «Автозагрузке Asus» из кода Ресурсы.openRawResource () проблема Android

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

У меня есть 3 фрагмента, один NavigationDrawer, один MapFragment и один пользовательский «MapInfoFragment». Я хочу, чтобы «MapInfoFragment» отображался полупрозрачным поверх MapFragment на определенных событиях и исчезал на других. Меня не волнует, полностью ли удаляю фрагмент и каждый раз создаю новый, или просто меняю видимость и отображаемую информацию. В настоящее время я просто пытаюсь использовать функцию .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:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.[packageName].asTest.MainActivity"> <!-- As the main content view, the view below consumes the entire space available using match_parent in both dimensions. --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent" map:cameraZoom="8" map:mapType="satellite" map:uiRotateGestures="false" android:layout_gravity="center_horizontal|top" /> </FrameLayout> <fragment android:id="@+id/navigation_drawer" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" android:name="com.[packageName].asTest.NavigationDrawerFragment" tools:layout="@layout/simple_list_item_1" /> <fragment android:id="@+id/map_info" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.[packageName].asTest.MapInfoFragment" /> </android.support.v4.widget.DrawerLayout> 

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

 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 был 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: Общее решение

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

Solutions Collecting From Web of "Попытка удалить фрагмент из представления дает мне NullPointerException на mNextAnim"

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

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

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

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

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

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

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

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

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

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

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

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

Правильно вызовите 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(); }