Prima un po 'di storia:
Ho un layout all'interno di una vista di scorrimento. All'inizio, quando l'utente scorre lo schermo, scorre la vista di scorrimento. Tuttavia, dopo una certa quantità di scorrimento, avrei dovuto disabilitare lo scorrimento nella vista di scorrimento per spostare il "focus di scorrimento" su una visualizzazione Web all'interno del layout figlio. In questo modo, la vista di scorrimento si attacca e tutti gli eventi di scorrimento passano alla vista Web al suo interno.
Quindi, per una soluzione, quando viene raggiunta la soglia di scorrimento, rimuovo il layout figlio dalla vista di scorrimento e lo inserisco nel padre della vista di scorrimento (e rendo invisibile la vista di scorrimento).
// 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);
Idea generale: (-> significa contiene)
Prima: parentlayout -> scrollview -> scrollChildLayout
Dopo: parentLayout -> scrollChildLayout
Il codice sopra mi dà questa eccezione:
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)
Sai cosa sta succedendo? Chiamo chiaramente removeView sul genitore.