오류 : 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;
}




'programmer > android' 카테고리의 다른 글

Battery check  (0) 2012.10.19
이클립스 환경 설정  (1) 2012.09.22
ddms에서 한글이 깨져 보일때  (0) 2011.11.24
support package 사용  (0) 2011.11.17
Eclipse 한글 깨지는 문제  (0) 2011.11.08

+ Recent posts