Estoy usando fragmentos, cuando instancia un fragmento la primera vez. pero la segunda vez obtuve esta excepción. ¿No pude encontrar la línea donde obtuve el error?
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)
Esto es lo que hago cuando hago clic en un elemento de mi fragmento de lista.
// 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();
La primera vez que está bien, hago clic en element2 de la lista, también está bien; pero cuando vuelvo a element1 tengo este error.
¡Gracias a todos!
android
android-layout
android-fragments
haythem souissi
fuente
fuente
Respuestas:
Cuando anula
OnCreateView
en suRouteSearchFragment
clase, tiene elsegmento de código?
Si es así, eliminar la declaración de devolución debería resolver su problema.
Puede conservar el código y devolver la vista si no desea volver a generar los datos de la vista, y el método onDestroyView () elimina esta vista de su padre así:
fuente
return inflater.inflate(R.layout.fragment_search, container);
conreturn inflater.inflate(R.layout.fragment_search, container, false);
Lamento publicar una pregunta anterior, pero pude solucionarlo con una solución totalmente diferente. Recibí esta excepción, pero cambié la primera línea de mi anulación onCreatView de esto:
...a esto:
No tengo idea de por qué, pero el uso de la anulación que acepta el booleano como tercer parámetro lo solucionó. Creo que le dice al Fragmento y / o Actividad que no use el "contenedor" como padre de la Vista recién creada.
fuente
Me he enfrentado a este problema muchas veces. Agregue el siguiente código para resolver este problema:
Gracias
fuente
Si tiene esta declaración ...
Entonces intente esto .. Agregue falso como tercer argumento .. Puede ser que pueda ayudar ..
fuente
Tenía este código en un fragmento y fallaba si intento volver a este fragmento
después de recopilar las respuestas en este hilo, me di cuenta de que el padre de mRootView todavía tiene mRootView como hijo. Entonces, esta fue mi solución.
espero que esto ayude
fuente
También sucede cuando la vista devuelta por onCreateView () no es la vista que se infló.
Ejemplo:
Reparar:
En vez de:
fuente
Tuve este problema y no pude resolverlo en código Java. El problema fue con mi xml.
Estaba intentando agregar un textView a un contenedor, pero había envuelto el textView dentro de un LinearLayout.
Este era el archivo xml original:
Ahora con el LinearLayout eliminado:
Esto no me pareció mucho, pero funcionó y no cambié mi código Java en absoluto. Todo estaba en xml.
fuente
Está agregando a
View
en alayout
, pero la Vista ya está en otralayout
. Una vista no puede estar en más de un lugar.fuente
Esta solución puede ayudar:
fuente
Lo resolví configurando
attachToRoot
deinflater.inflate()
afalse
.fuente
en su archivo xml debe establecer layout_width y layout_height de wrap_content a match_parent. está arreglado para mí.
fuente