После перехода на AndroidX происходит сбой приложения с попыткой вызвать androidx.fragment.app.FragmentManagerImpl.isDestroyed () со значением NULL. - PullRequest
2 голосов
/ 16 июня 2019

Полный стек включает только код ядра Android:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
    at androidx.fragment.app.Fragment.performDetach(Fragment.java:2844)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1033)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1237)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:434)
    at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2075)
    at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1865)
    at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1820)
    at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1726)
    at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Это происходит при замене фрагмента в основной деятельности:

Runnable mPendingRunnable = new Runnable() {
            @Override
            public void run() {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.frame, fragment);
                fragmentTransaction.commitAllowingStateLoss();
            }
        };

Ответы [ 3 ]

3 голосов
/ 18 июня 2019

В модуле моего модуля я исправил его, вернув

implementation 'androidx.appcompat:appcompat:1.1.0-beta01'

в

implementation 'androidx.appcompat:appcompat:1.1.0-alpha05'

(ответ выше с материалом childFragmentManager не помог.)

2 голосов
/ 16 июня 2019

Я нашел фрагмент кода в myFragment.onDetach, который вызывал это:

Это был обходной путь от Получение ошибки «Java.lang.IllegalStateException Activity было уничтожено» при использовании вкладок сViewPager

        try {
            Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
            childFragmentManager.setAccessible(true);
            childFragmentManager.set(this, null);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

Теперь в androidx этот обходной путь не нужен.

0 голосов
/ 20 июня 2019

У меня был этот код в моем базовом фрагменте

   try {
            val childFragmentManager = androidx.fragment.app.Fragment::class.java.getDeclaredField(
                    "mChildFragmentManager"
            )
            childFragmentManager.isAccessible = true
            childFragmentManager.set(this, null)
        } catch (e: NoSuchFieldException) {
            e.printStackTrace()
        } catch (e: IllegalAccessException) {
            e.printStackTrace()
        }

после удаления этого кода было исправлено падение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...