首先简单介绍一下背景:
我有一个位于scrollview内的布局。刚开始,当用户在屏幕上滚动时,scrollview会滚动。但是,在滚动了一定量后,我想禁用scrollview上的滚动并将“滚动焦点”移动到子布局内部的webview上。这样,scrollview就不会滚动了,而所有的滚动事件都传递给它内部的webview。
那么,解决方案是,当滚动阈值达到时,我将子布局从scrollview中移除并放入scrollview的父布局中(并将scrollview设置为不可见)。
// 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);
总体思路:(->表示包含)
之前:parentlayout -> scrollview -> scrollChildLayout
之后:parentLayout -> scrollChildLayout
上述代码给了我这个异常:
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)
你知道发生了什么吗?我明显在父级上调用了removeView。
scrollView.removeView(scrollChildLayout)
试图从scrollView中移除子视图,而不是将scrollView本身从其父ViewGroup中移除。 - Dmitry Gryazinif (mAdView.getParent()!=null) ((ViewGroup) mAdView.getParent()).removeView(mAdView);
- Tarek