java.lang.IllegalStateException: określone dziecko ma już rodzica
Używam fragmentów, kiedy inicjuję fragment za pierwszym razem. ale za drugim razem dostałem ten wyjątek. Nie mogłem znaleźć linii, w której znalazłem błąd?
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)
Oto, co robię, gdy klikam na element mojego fragmentu listy.
// 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();
Pierwszy Raz jest Ok, klikam element2 z listy, jest również ok; ale kiedy wracam do element1 mam ten błąd.
Dzięki wszystkim!11 answers
Kiedy nadpisujesz OnCreateView
w swojej klasie RouteSearchFragment
, Czy masz
if(view != null) {
return view;
}
Segment kodu?
Jeśli tak, usunięcie instrukcji return powinno rozwiązać twój problem.
Możesz zachować kod i zwrócić Widok, jeśli nie chcesz regenerować danych widoku, a metoda onDestroyView() usunie ten widok z jego rodzica w następujący sposób:
@Override
public void onDestroyView() {
super.onDestroyView();
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeAllViews();
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 19:07:41
Przepraszam, że piszę do starego pytania, ale udało mi się to naprawić za pomocą zupełnie innego rozwiązania. Otrzymywałem ten wyjątek, ale zmieniłem pierwszą linię mojego obejścia oncreatview z tego:
View result = inflater.inflate(R.layout.customer_layout, container);
... do tego:
View result = inflater.inflate(R.layout.customer_layout, container, false);
Nie mam pojęcia dlaczego, ale użycie nadpisania, które akceptuje boolean jako trzeci param naprawiło to. Myślę, że mówi fragmentowi i / lub aktywności, aby nie używał "kontenera" jako rodzica nowo utworzonego widoku. HTH!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-19 00:47:40
Mam do czynienia z tym problemem wiele razy. Aby rozwiązać ten problem, Dodaj następujący kod:
@Override
public void onDestroyView() {
super.onDestroyView();
if (view != null) {
ViewGroup parentViewGroup = (ViewGroup) view.getParent();
if (parentViewGroup != null) {
parentViewGroup.removeAllViews();
}
}
}
Thanks
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-15 11:54:50
Jeśli masz to oświadczenie..
View view = inflater.inflate(R.layout.fragment1, container);//may be Incorrect
Więc spróbuj tego.. Dodaj false jako trzeci argument.. Może to pomoże..
View view = inflater.inflate(R.layout.fragment1, container, false);//correct one
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 08:38:24
Miałem ten kod we fragmencie i się psował, gdy próbowałem wrócić do tego fragmentu
if (mRootView == null) {
mRootView = inflater.inflate(R.layout.fragment_main, container, false);
}
Po zebraniu odpowiedzi w tym wątku, zdałem sobie sprawę, że rodzic mRootView nadal ma mRootView jako dziecko. Więc to było moje rozwiązanie.
if (mRootView == null) {
mRootView = inflater.inflate(R.layout.fragment_main, container, false);
} else {
((ViewGroup) mRootView.getParent()).removeView(mRootView);
}
Hope this helps
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-04 11:29:51
Dzieje się tak również wtedy, gdy Widok zwrócony przez oncreateview () nie jest widokiem, który został zawyżony.
Przykład:
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;
Zamiast:
return textView; // or whatever you returned
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-19 20:37:24
Miałem ten problem i nie mogłem go rozwiązać w kodzie Java. Problem był z moim xml.
Próbowałem dodać textView do kontenera, ale owinąłem textView wewnątrz LinearLayout.
To był oryginalny plik 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>
Teraz z LinearLayout usunięty:
<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"/>
Nie wydawało mi się to zbyt wiele, ale zadziałało, a ja w ogóle nie zmieniłem kodu Javy. Wszystko było w xml.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 14:00:38
Dodajesz View
do layout
, ale widok jest już w innym layout
. Widok nie może być w więcej niż jednym miejscu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 08:21:17
To rozwiązanie może pomóc:
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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 06:32:11
W pliku xml powinieneś ustawić layout_width i layout_height z wrap_content na match_parent. to dla mnie naprawione.
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-15 07:38:32
Rozwiązałem to ustawiając attachToRoot
z inflater.inflate()
na false
.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_overview, container, false);
return view;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 10:45:59