J'utilise des fragments, lorsque j'instancie un fragment la première fois. mais la deuxième fois, j'ai eu cette exception. Je n'ai pas trouvé la ligne où j'ai eu l'erreur?
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)
Voici ce que je fais lorsque je clique sur un élément de mon fragment de liste.
// 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 première fois que c'est OK, je clique sur element2 dans la liste, c'est aussi ok; mais quand je reviens à element1 j'ai eu ce bug.
Merci tout le monde!
android
android-layout
android-fragments
haythem souissi
la source
la source
Réponses:
Lorsque vous remplacez
OnCreateView
dans votreRouteSearchFragment
classe, avez-vous lesegment de code?
Si tel est le cas, la suppression de l'instruction return devrait résoudre votre problème.
Vous pouvez conserver le code et retourner la vue si vous ne voulez pas régénérer les données de la vue, et la méthode onDestroyView () vous supprimez cette vue de son parent comme ceci:
la source
return inflater.inflate(R.layout.fragment_search, container);
parreturn inflater.inflate(R.layout.fragment_search, container, false);
Désolé de publier une ancienne question, mais j'ai pu la résoudre en utilisant une solution totalement différente. J'obtenais cette exception mais j'ai changé la première ligne de mon remplacement onCreatView à partir de ceci:
...pour ça:
Je n'ai aucune idée de pourquoi, mais en utilisant le remplacement qui accepte le booléen comme troisième paramètre le fixe. Je pense que cela indique au fragment et / ou à l'activité de ne pas utiliser le "conteneur" comme parent de la vue nouvellement créée.
la source
J'ai fait face à ce problème à plusieurs reprises. Veuillez ajouter le code suivant pour résoudre ce problème:
Merci
la source
Si vous avez cette déclaration ...
Ensuite, essayez ceci. Ajoutez false comme troisième argument. Cela pourrait peut-être vous aider.
la source
J'avais ce code dans un fragment et il plantait si j'essaye de revenir sur ce fragment
après avoir rassemblé les réponses sur ce fil, j'ai réalisé que le parent de mRootView avait toujours mRootView comme enfant. Donc, c'était ma solution.
J'espère que cela t'aides
la source
Cela se produit également lorsque la vue renvoyée par onCreateView () n'est pas la vue qui a été gonflée.
Exemple:
Réparer:
Au lieu de:
la source
J'ai eu ce problème et je n'ai pas pu le résoudre en code Java. Le problème était avec mon xml.
J'essayais d'ajouter un textView à un conteneur, mais j'avais enveloppé le textView dans un LinearLayout.
C'était le fichier xml d'origine:
Maintenant avec le LinearLayout supprimé:
Cela ne me semblait pas grand-chose mais cela a fonctionné, et je n'ai pas du tout changé mon code Java. Tout était dans le xml.
la source
Vous ajoutez un
View
dans unlayout
, mais la vue est déjà dans une autrelayout
. Une vue ne peut pas se trouver à plusieurs endroits.la source
Cette solution peut aider:
la source
Je l' ai résolu en mettant
attachToRoot
deinflater.inflate()
àfalse
.la source
dans votre fichier xml, vous devez définir layout_width et layout_height de wrap_content à match_parent. c'est réglé pour moi.
la source