最近遇到一個很讓人頭疼的問題,使用viewpager動态添加頁面或者删除頁面時出現了問題(java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first),在stackoverflow上找到了解決辦法。(http://stackoverflow.com/questions/22936886/java-lang-illegalstateexception-while-using-viewpager-in-android)
原文是:
the problem is that in your adapters method
instantiateItem
you call
container.addView(v);
but every
View
can have only one parent,
so it can be added only one time to a container via
addView(...)
.
When you open the popup the first time, everything works, because
v
doesn't have a parent that time. But when you open your popupwinow the second time,
it adds the view again to the container. That cerates the error.
Try to destroy the view if you close the popup view or remove all children views from it with
container.removeAllViews()
解決辦法是在instantiateItem中使用如下方式:
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null) {
parent.removeAllViews();
}
container.addView(v);
中間很多次嘗試已經接近答案,但是習慣性的去把v.getParent()強制轉化為view,view沒有removeView()方法,以至于放棄了這種方法,以後要多思考,想到的解決辦法如果完全不是自己想要的結果,一定要再檢查一遍,很有可能是某個小地方沒注意。
