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 défilante défile. Cependant, après une certaine quantité de défilement, je devais désactiver le défilement sur la vue de défilement et déplacer le "scroll focus" sur une vue web à l'intérieur de la mise en page enfant. De cette façon, la vue de défilement reste en place et tous les événements de défilement sont dirigés vers la vue Web qu'elle contient.
Donc, pour une solution, lorsque le seuil de défilement est atteint, je supprime la mise en page enfant du scrollview et la place dans le parent du scrollview (et rend le scrollview 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
After : 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)
Vous savez ce qui se passe ? Je suis clairement en train d'appeler removeView sur le parent.