Tout d'abord un peu de contexte:
J'ai une mise en page dans un scrollview. Au début, lorsque l'utilisateur fait défiler l'écran, la vue de défilement défile. Cependant, après un certain nombre de défilement, je devais désactiver le défilement sur la vue de défilement et déplacer le "focus de défilement" sur une vue Web à l'intérieur de la mise en page enfant. De cette façon, la vue de défilement reste bloquée et tous les événements de défilement vont à la vue Web à l'intérieur.
Donc, pour une solution, lorsque le seuil de défilement est atteint, je supprime la mise en page enfant de la vue de défilement et la place dans le parent de la vue de défilement (et rend la vue de défilement invisible).
// Remove the child view from the scroll view
scrollView.removeView(scrollChildLayout);
// Get scroll view out of the way
scrollView.setVisibility(View.GONE);
// Put the child view into scrollview's parent view
parentLayout.addView(scrollChildLayout);
Idée générale: (-> signifie contient)
Avant: parentlayout -> scrollview -> scrollChildLayout
Après: parentLayout -> scrollChildLayout
Le code ci-dessus me donne cette exception:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1828)
at android.view.ViewGroup.addView(ViewGroup.java:1808)
Savez-vous ce qui se passe? J'appelle clairement removeView sur le parent.