java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.java
不知道你們在使用ViewPager的時候有沒有碰到過這個問題, 反正我是碰到了,因此作個記錄,但願對之後有用ide
從字面上看,就是說子view已經有了一個父控件,因此你得先把父控件remove掉. 由於每個子view 只能擁有一個父控件,可是當你滑動viewpager的時候,在PagerAdapter中的 instantiateItem 方法就會重複執行,這時候就會屢次添加父控件,因此若是不作處理,就會報這個錯.code
因此個人處理就是在用到public class MyPagerAdapter extends PagerAdapter 的時候,在他的instantiateItem方法中,先獲取到父控件,判空下圖片
@Override public Object instantiateItem(ViewGroup container, int position) { ImageView mImageView = new ImageView(context); // 設置圖片根據imageView來將圖片進行拉伸 mImageView.setScaleType(ScaleType.FIT_XY); ViewGroup parent = (ViewGroup) mImageView.getParent(); if (null != parent) { parent.removeAllViews(); } // 當前頁面爲第幾頁(60000頁) 而後除以集合的長度 取餘數就是當前頁面在list集合中對應圖片的位置 mImageView.setImageResource(list.get(position % list.size()).getIconId()); container.addView(mImageView); return mImageView; }
而且在每個fragment的onCreateView中,都作了下面的處理ci
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (null == view ) { view = inflater.inflate(R.layout.fragment5, container, false); } else { ViewGroup parent = (ViewGroup) view.getParent(); if (null != parent) { parent.removeAllViews(); } } initView(view); return view; }
這樣就不會報那個錯了~~rem