Я использую фрагменты, когда создаю экземпляр фрагмента в первый раз. но во второй раз я получил это исключение. Не удалось найти строку, в которой возникла ошибка?
04-04 08:51:54.320: E/AndroidRuntime(29713): FATAL EXCEPTION: main
04-04 08:51:54.320: E/AndroidRuntime(29713): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addViewInner(ViewGroup.java:3013)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2902)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2859)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2839)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.NoSaveStateFrameLayout.wrap(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.BackStackRecord.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.handleCallback(Handler.java:587)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.dispatchMessage(Handler.java:92)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Looper.loop(Looper.java:132)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.app.ActivityThread.main(ActivityThread.java:4126)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invokeNative(Native Method)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invoke(Method.java:491)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
04-04 08:51:54.320: E/AndroidRuntime(29713): at dalvik.system.NativeStart.main(Native Method)
Вот что я делаю, когда нажимаю на элемент фрагмента моего списка.
// If we are not currently showing a fragment for the new
// position, we need to create and install a new one.
RouteSearchFragment df = RouteSearchFragment.newInstance(index);
// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.details_full, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
В первый раз, когда все в порядке, я нажимаю element2 из списка, это тоже нормально; но когда я вернусь к element1, у меня возникла эта ошибка.
Спасибо всем!
android
android-layout
android-fragments
Хайтем Суисси
источник
источник
Ответы:
Когда вы переопределяете
OnCreateView
в своемRouteSearchFragment
классе, есть ли у вассегмент кода?
Если это так, удаление оператора return должно решить вашу проблему.
Вы можете сохранить код и вернуть представление, если вы не хотите повторно создавать данные представления, а методом onDestroyView () вы удаляете это представление из его родителя следующим образом:
источник
return inflater.inflate(R.layout.fragment_search, container);
наreturn inflater.inflate(R.layout.fragment_search, container, false);
Извините, что отправил на старый вопрос, но я смог исправить его, используя совершенно другое решение. Я получал это исключение, но я изменил первую строку моего переопределения onCreatView следующим образом:
...к этому:
Я понятия не имею, почему, но использование переопределения, которое принимает логическое значение, поскольку третий параметр исправил его. Я думаю, что это говорит Фрагменту и / или Деятельности не использовать «контейнер» в качестве родителя вновь созданного Представления.
источник
Я сталкивался с этой проблемой много раз. Добавьте следующий код для решения этой проблемы:
Спасибо
источник
Если у вас есть это заявление ..
Тогда попробуйте это .. Добавьте false в качестве третьего аргумента .. Может быть, это поможет ..
источник
У меня был этот код во фрагменте, и он вылетал, если я пытаюсь вернуться к этому фрагменту
собрав ответы в этой теме, я понял, что родительский элемент mRootView по-прежнему имеет mRootView в качестве дочернего элемента. Итак, это было моим исправлением.
надеюсь это поможет
источник
Это также происходит, когда представление, возвращаемое onCreateView (), не является представлением, которое было раздутым.
Пример:
Исправить:
Вместо того:
источник
У меня была эта проблема, и я не мог решить ее в Java-коде. Проблема была в моем xml.
Я пытался добавить textView в контейнер, но заключил textView в LinearLayout.
Это был исходный файл xml:
Теперь, когда LinearLayout удален:
Мне это показалось незначительным, но помогло, и я вообще не изменил свой Java-код. Все это было в xml.
источник
Вы добавляете объект
View
в объектlayout
, но представление уже находится в другомlayout
. Представление не может находиться более чем в одном месте.источник
Это решение может помочь:
источник
Я решил его, установив
attachToRoot
вinflater.inflate()
кfalse
.источник
в вашем xml файле вы должны установить layout_width и layout_height из wrap_content в match_parent. это исправлено для меня.
источник