3

На Nexus 7 c Android 5.0(не 4.4) происходит крах с Exception из заголовка. После непродолжительных поисков был найден следующий ответ. Меня он не устраивает, так как в силу обстоятельств не могу отказаться от android.support.v4.app.

Возможность операции над фрагментом, равным null, я тоже рассматривал, но такого быть не должно. Отрывок кода под подозрением:

String tag = FRAGMENT_STATE;
FragmentManager fragmentManager = getSupportFragmentManager();
...
stateFragment = new Fragment();
...
if (stateFragment != null) {
...
android.support.v4.app.FragmentTransaction transaction = fragmentManager.beginTransaction();//.support.v4
transaction.replace(R.id.content_frame, stateFragment, tag);
...          
transaction.commitAllowingStateLoss();  

Еще есть следующий отрывок:

  //Типо подключаю фрагменты
  if(onerFragment == null) Logi.d("OneFragment is Null");
  //if (oneFragment == null || twoeFragment == null) {
  Logi.d("блок подключения фрагментов");
  fragmentTransaction = fragmentManager.beginTransaction();
  Logi.d("oneGragment constructer before");
  oneFragment = new OneGragment();
  fragmentTransaction.add(R.id.one_fragment, oneFragment);
  Logi.d("TwoFragment constructer before");
  twoFragment = new TwoFragment();
  fragmentTransaction.add(R.id.two_fragment, twoFragment);

  fragmentTransaction.commitAllowingStateLoss();  

Логи:

FATAL EXCEPTION: main Process: название пакета, PID: 7755 java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:709) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

P.S Устройства у меня нет, логи взяты из GoogleTestLab, тестирование на эмуляторе тоже не смогу. есть ли у кого-нибудь идеи что делать с этим "эксепшеном"?

  • Во второй части, Вы проверяете если 1 или 2 фрагмент null - начинаете транзакцию, мб забыли поставить не null. !null – Shwarz Andrei Feb 09 '16 at 06:18
  • Проверку эту я закоментил. Удаляю и добавляю вручную – Djangorussia Feb 09 '16 at 06:30

1 Answers1

5

Вот здесь сказано: Это происходит из-за того, что Вы вызываете методы remove(), add() и т.п. со значением null.

Поразумевается, что replace() - это remove() и за ним add().

  • Думаешь мне поможет что то в духе fragmentManager.getFragment(R.id.fragment_id) == null, то делаем адд, иначе репласе – Djangorussia Feb 09 '16 at 06:30
  • @jangorussia, да, думаю именно это и имеет в виду автор ответа) – ЮрийСПб Feb 09 '16 at 06:56