首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ViewPager 子 View 已有父佈局異常:removeView 復用機制

     編輯:程式設計綜合問答

錯誤

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

原因

同一 `View` 實例被添加到多個父容器,或在 `PagerAdapter.instantiateItem` 中重複添加未移除的 View。

修正模式

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View view = views.get(position); // 預建立或緩存的 View
    if (view.getParent() != null) {
        ((ViewGroup) view.getParent()).removeView(view); // 關鍵:先移除
    }
    container.addView(view);
    return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

建議

優先使用 `FragmentStatePagerAdapter` / `FragmentPagerAdapter` 配合 `Fragment`,由系統管理 View 生命周期,避免手動 `removeView` 易出錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved