在使用ViewPager和Tablayout动态加载后台数据进行多页显示时遇到了一个问题,记录如下:
报错信息:
java.lang.IllegalStateException: The specified child already has a parent.
You must call removeView() on the child's parent first.
初步分析:
错误发生在自定义的PageAdapter的instantiateItem函数中,根据错误日志字面意思来分析是在添加子View的时候parent已经有了儿子,需要先把之前的儿子赶走的样子。
// 修改前的代码
@Override
public Object instantiateItem(ViewGroup container, int position) { /
try {
container.addView(viewPageList.get(position));// 报错位置
} catch (Exception e) {
e.printStackTrace();
}
return viewPageList.get(position);
}
解决方案:
在添加子View之前进行判断,父控件是否为空,修改代码如下
@Override
public Object instantiateItem(ViewGroup container, int position) {
try {
if (viewPageList.get(position).getParent() == null) {
container.addView(viewPageList.get(position));
} else {
((ViewGroup) viewPageList.get(position).getParent()).removeView(viewPageList.get(position));
container.addView(viewPageList.get(position));
}
} catch (Exception e) {
e.printStackTrace();
}
return viewPageList.get(position);
}