오류 : java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

원인 1 : 여러 가지 원인이 있을 수 있지만 가장 가능성이 높은 것은 레이아웃에 설정되 id가 다른 layout에도 중복되어 발생할 확률이 높다. 워낙에 복사해서 사용하다보니...

원인 2 : 아래 소스와 같은 경우 PagerAdapter 클래스의 addItem()에서 ViewPager에 addView를 하게 되면 instantiateItem을 수행하면서 child가 중복이 되어 문제가 발생한다. 붉은색 부분을 막으면 해결된다.

public void addItem(View container, ImageView imageview){
myLog("addItem()");
if(imageview == null){
return;
}
if(container == null){
return;
}
mImageList.add(imageview);
((ViewPager) container).addView(imageview); //java.lang.IllegalStateException
notifyDataSetChanged();
}

@Override
public Object instantiateItem(View container, int position) {
myLog("instantiateItem() - position : "+position+", viewCount : "+viewCount);
if((mImageList == null) || (position >= viewCount)){
return null;
}
ImageView imageView = mImageList.get(position);
myLog("instantiateItem() - getChildCount : "+((ViewPager) container).getChildCount());
if(imageView.getParent() != null){
myLog("imageView.getParent() class : "+imageView.getParent().getClass());
}
((ViewPager) container).addView(imageView); //(imageView, position);
//myLog("instantiateItem() - imageView : "+imageView);
return imageView;
}




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by ocsoosoo

댓글을 달아 주세요

이전버튼 1 이전버튼

티스토리 툴바