问题说明:
View 在多次调用view.getParent().removeView(view); 之后,调用ViewGroup.addView(view ) 程序崩溃。
if (child.getParent() != null) {
throw new IllegalStateException("The specified child already has a parent. " +
"You must call removeView() on the child's parent first.");
}
跟踪ViewGroup.removeView() 我们发现, 最终会调用到这个位置:
private void removeFromArray(int index) {
final View[] children = mChildren;
if (!(mTransitioningViews != null && mTransitioningViews.contains(children[index]))) {
children[index].mParent = null;
}
因为被移除的视图在mTransitioningViews中,(正在执行移除动画)因此没有将他的parent 设置为空。 然后导致添加view 的时候,崩溃了。
通过分析,找到了导致问题的原因。
public void startViewTransition(View view) {
if (view.mParent == this) {
if (mTransitioningViews == null) {
mTransitioningViews = new ArrayList<View>();
}
mTransitioningViews.add(view);
}
}