java.lang.IllegalStateException: на android.view.ViewGroup.addViewInner - PullRequest
0 голосов
/ 07 января 2019

Сбой приложения с последующей трассировкой стека на каком-либо устройстве с версией ОС Я попробовал некоторые другие предложения, ни один из них не работает. Я не знаю, где именно происходит сбой.

ViewGroup.java Проблема AddViewInner

compileSdkVersion 28
minSdkVersion 17
targetSdkVersion 28

Всегда раздувать макет, как показано ниже для всего экрана:

if (mainView == null) {
     mainView = inflater.inflate(R.layout.fragment_main, container, false);
}

Фрагмент фиксации:

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.fragment_slide_in_left, R.anim.fragment_slide_out_left, R.anim.fragment_slide_in_right, R.anim.fragment_slide_out_right);
ft.replace(R.id.main_content, fragment, fragment.getTagText());
ft.addToBackStack(fragment.getTagText());
ft.commit();

Сбой 1:

  java.lang.IllegalStateException: 
  at android.view.ViewGroup.addViewInner (ViewGroup.java:5008)
  at android.view.ViewGroup.addView (ViewGroup.java:4833)
  at android.view.ViewGroup.addView (ViewGroup.java:4773)
  at android.view.ViewGroup.addView (ViewGroup.java:4746)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1466)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManagerImpl.java:1784)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1852)
  at android.support.v4.app.BackStackRecord.executePopOps (BackStackRecord.java:860)
  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:2622)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.java:2411)
  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManagerImpl.java:2366)
  at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:2273)
  at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:733)
  at android.os.Handler.handleCallback (Handler.java:790)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:171)
  at android.app.ActivityThread.main (ActivityThread.java:6656)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)

Сбой 2:

java.lang.IllegalStateException: 
  at android.view.ViewGroup.addViewInner (ViewGroup.java:5122)
  at android.view.ViewGroup.addView (ViewGroup.java:4953)
  at android.view.ViewGroup.addView (ViewGroup.java:4893)
  at android.view.ViewGroup.addView (ViewGroup.java:4866)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1466)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManagerImpl.java:1784)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1852)
  at android.support.v4.app.BackStackRecord.executePopOps (BackStackRecord.java:860)
  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:2622)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.java:2411)
  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManagerImpl.java:2366)
  at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:2273)
  at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:733)
  at android.os.Handler.handleCallback (Handler.java:789)
  at android.os.Handler.dispatchMessage (Handler.java:98)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6940)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

Как исправить это падение?

1 Ответ

0 голосов
/ 07 января 2019

Удалите эту проверку на ноль и увеличьте вид в onCreateView.

Когда вы возвращаете старое представление, фрагмент (mainView != null) пытается снова добавить его в иерархию представлений. Возникает исключение, поскольку старое представление уже имеет родителя и не может быть добавлено снова.

источник ViewGroup.addViewInner:

    if (child.getParent() != null) {
        throw new IllegalStateException("The specified child already has a parent. " +
                "You must call removeView() on the child's parent first.");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...