Java.lang.IllegalStateException: указанный ребенок уже имеет родительский

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

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(); 

В первый раз Ok, я щелкаю element2 из списка, это также нормально; Но когда я возвращаюсь к элементу1, я получил эту ошибку.

Всем спасибо!

Solutions Collecting From Web of "Java.lang.IllegalStateException: указанный ребенок уже имеет родительский"

Когда вы переопределяете OnCreateView в вашем классе RouteSearchFragment , у вас есть

 if(view != null) { return view; } 

Сегмент кода?

Если это так, удаление оператора return должно решить вашу проблему.

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

 View result = inflater.inflate(R.layout.customer_layout, container); 

…к этому:

 View result = inflater.inflate(R.layout.customer_layout, container, false); 

Я понятия не имею, почему, но используя переопределение, которое принимает логическое значение, поскольку третий параметр зафиксировал его. Я думаю, что он сообщает Фрагменту и / или Деянию не использовать «контейнер» в качестве родителя вновь созданного представления. НТН!

Я сталкиваюсь с этой проблемой много раз. Добавьте следующий код для решения этой проблемы:

 @Override public void onDestroyView() { super.onDestroyView(); if (view != null) { ViewGroup parentViewGroup = (ViewGroup) view.getParent(); if (parentViewGroup != null) { parentViewGroup.removeAllViews(); } } } 

благодаря

Если у вас есть это заявление ..

 View view = inflater.inflate(R.layout.fragment1, container);//may be Incorrect 

Тогда попробуйте это. Добавьте false как третий аргумент. Может быть, это может помочь ..

 View view = inflater.inflate(R.layout.fragment1, container, false);//correct one 

У меня был этот код в фрагменте, и он сбой, если я попытаюсь вернуться к этому фрагменту

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

После сбора ответов на эту тему, я понял, что у родителя mRootView все еще есть mRootView как дочерний. Итак, это было мое решение.

 if (mRootView == null) { mRootView = inflater.inflate(R.layout.fragment_main, container, false); } else { ((ViewGroup) mRootView.getParent()).removeView(mRootView); } 

надеюсь это поможет

Это также происходит, когда представление, возвращаемое onCreateView (), не является раздутым представлением.

Пример:

 View rootView = inflater.inflate(R.layout.my_fragment, container, false); TextView textView = (TextView) rootView.findViewById(R.id.text_view); textView.setText("Some text."); return textView; 

Fix:

 return rootView; 

Вместо:

 return textView; // or whatever you returned 

У меня была эта проблема и я не мог ее решить в Java-коде. Проблема была в моем xml.

Я пытался добавить textView в контейнер, но обернул textView внутри LinearLayout.

Это был исходный файл xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:textColor="#fff" android:background="?android:attr/activatedBackgroundIndicator" android:minHeight="?android:attr/listPreferredItemHeightSmall"/> </LinearLayout> 

Вы добавляете представление в layout , но представление уже находится в другом layout . Вид не может находиться в нескольких местах.

Это решение может помочь:

 public class FragmentItem extends Android.Support.V4.App.Fragment { View rootView; TextView textView; public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (rootView != null) { ViewGroup parent = (ViewGroup)rootView.Parent; parent.RemoveView(rootView); } else { rootView = inflater.Inflate(Resource.Layout.FragmentItem, container, false); textView = rootView.FindViewById<TextView>(Resource.Id.textViewDisplay); } return rootView; } }