精华内容
下载资源
问答
  • 原文:https://blog.csdn.net/lxd_love_lgc/article/details/105650993之前在做ViewPage+Fragment... You must call removeView() on the child’s parent first. 报错信息如下: java.lang.IllegalStateException.

    原文:https://blog.csdn.net/lxd_love_lgc/article/details/105650993
    之前在做ViewPage+Fragment 横竖屏切换时 遇到报错了,搞了好久才解决,所以记录一下:
    The specified child already has a parent. You must call removeView() on the child’s parent first.

    报错信息如下:
     

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
    	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
    	at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5368)
    	at android.app.ActivityThread.-wrap19(Unknown Source:0)
    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897)
    	at android.os.Handler.dispatchMessage(Handler.java:108)
    	at android.os.Looper.loop(Looper.java:166)
    	at android.app.ActivityThread.main(ActivityThread.java:7425)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
    	at android.view.ViewGroup.addViewInner(ViewGroup.java:4976)
    	at android.view.ViewGroup.addView(ViewGroup.java:4807)
    	at androidx.viewpager.widget.ViewPager.addView(ViewPager.java:1485)
    	at android.view.ViewGroup.addView(ViewGroup.java:4747)
    	at android.view.ViewGroup.addView(ViewGroup.java:4720)
    	at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:326)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    	at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
    	at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
    	at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
    	at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
    	at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
    	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1339)
    	at android.app.Activity.performStart(Activity.java:7392)
    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3157)
    	... 10 more","40","0",
    

    主要报错原因的就是这句: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。

    两种解决办法

    第一种: 获取view 的父类 并移除
     

    private View view;
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            if (view == null) {
                view = inflater.inflate(R.layout.message_center_fragment, container, false);
            }
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null) {
                parent.removeView(view);
            }
            
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            if (view != null) {
                ViewGroup parentView = (ViewGroup) view.getParent();
                if (parentView != null) {
                    parentView.removeView(view);
                }
            }
        }     
    

    不过这种方式试了一下不一定奏效

    第二种方法:
    在Fragment 所以依赖的activity 的AndroidManifest.xml 中加一个配置项
     

        android:configChanges="orientation|keyboardHidden|screenSize" />
    

    该配置项的作用: activity在横竖屏切换的时候不重新调用onCreate方法

    亲测有效
    希望对同样遇到这个问题的同学有所帮助

    展开全文
  • You must call removeView() on the child’s parent first 异常描述:非法状态异常,特定的 child 已经有一个 parent 了,你必须在这个 parent 中首先调用 removeView() 方法,才能继续你的内容。 一个视图只能...

    java.lang.IllegalStateException:The specified child already has a parent. You must call removeView() on the child’s parent first
    异常描述:非法状态异常,特定的 child 已经有一个 parent 了,你必须在这个 parent 中首先调用 removeView() 方法,才能继续你的内容。

    一个视图只能添加到一个布局中,如果重复添加,或者再添加到另外一个视图中,会报这个异常。视图不能重复引用。
    解决方法:
    1.避免重复添加view到视图中
    2.添加view到视图前,调用removeView(view),解除视图绑定,再添加

    展开全文
  • 之前在做ViewPage+Fragment 横竖屏切换时 遇到报错了,搞了好久才解决,所以记录一下: ... You must call removeView() on the child’s parent first. 报错信息如下: java.lang.IllegalStateException: The speci...

    之前在做ViewPage+Fragment 横竖屏切换时 遇到报错了,搞了好久才解决,所以记录一下:
    The specified child already has a parent. You must call removeView() on the child’s parent first.

    报错信息如下:

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
    	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
    	at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5368)
    	at android.app.ActivityThread.-wrap19(Unknown Source:0)
    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897)
    	at android.os.Handler.dispatchMessage(Handler.java:108)
    	at android.os.Looper.loop(Looper.java:166)
    	at android.app.ActivityThread.main(ActivityThread.java:7425)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
    	at android.view.ViewGroup.addViewInner(ViewGroup.java:4976)
    	at android.view.ViewGroup.addView(ViewGroup.java:4807)
    	at androidx.viewpager.widget.ViewPager.addView(ViewPager.java:1485)
    	at android.view.ViewGroup.addView(ViewGroup.java:4747)
    	at android.view.ViewGroup.addView(ViewGroup.java:4720)
    	at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:326)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    	at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
    	at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
    	at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
    	at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
    	at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
    	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1339)
    	at android.app.Activity.performStart(Activity.java:7392)
    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3157)
    	... 10 more","40","0",
    

    主要报错原因的就是这句: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。

    两种解决办法

    第一种: 获取view 的父类 并移除

    private View view;
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            if (view == null) {
                view = inflater.inflate(R.layout.message_center_fragment, container, false);
            }
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null) {
                parent.removeView(view);
            }
            
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            if (view != null) {
                ViewGroup parentView = (ViewGroup) view.getParent();
                if (parentView != null) {
                    parentView.removeView(view);
                }
            }
        }     
    

    不过这种方式试了一下不一定奏效

    第二种方法:
    在Fragment 所以依赖的activity 的AndroidManifest.xml 中加一个配置项

        android:configChanges="orientation|keyboardHidden|screenSize" />
    

    该配置项的作用: activity在横竖屏切换的时候不重新调用onCreate方法

    亲测有效
    希望对同样遇到这个问题的同学有所帮助

    展开全文
  • You must call removeView() on the child's parent first. 翻译过来就是这个子控件已经有了一个父控件,我们必须首先在父控件中使用removeView()函数,出现这种错误原因时一个子控件只只能有一个父控件,不能有两...

    当我们在动态地添加一些控件时,在运行过程中会出现以下错误:

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

    翻译过来就是这个子控件已经有了一个父控件,我们必须首先在父控件中使用removeView()函数,出现这种错误原因时一个子控件只能有一个父控件,不能有两个子控件有一个相同的父控件,故出现以上错误。

    public class LunBoAdapter extends PagerAdapter {
        private ArrayList<ImageView> imageViewList;
        public LunBoAdapter(ArrayList<ImageView> mImgList){
            this.imageViewList = mImgList;
        }
    
        // 1. 返回要显示的条目内容, 创建条目
        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            // container: 容器: ViewPager
            // position: 当前要显示条目的位置 0 -> 4
            //newPosition = position % 5
            int newPosition = position % imageViewList.size();
            ImageView img = imageViewList.get(newPosition);
            ViewPager parent = (ViewPager) img.getParent();
            if (parent != null) {
                parent.removeView(img);
            }
            // a. 把View对象添加到container中
            container.addView(img);
            // b. 把View对象返回给框架, 适配器
            return img;
        }
    
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            //container.removeView((View)object);
        }
    
        @Override
        public int getCount() {
            return Integer.MAX_VALUE;   //返回一个无限大的值,可以 无限循环!!!!!
        }
    
        /**
         * 判断是否使用缓存, 如果返回的是true, 使用缓存. 不去调用instantiateItem方法创建一个新的对象
         */
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
            return view == o ;
        }
    }
    

    解决方法:
    在instantiateItem方法里面判断父控件是否存在,如果存在就要把之前的子控件给移除掉,然后再添加新的子控件,这样就行了。

    public Object instantiateItem(@NonNull ViewGroup container, int position) {
            // container: 容器: ViewPager
            // position: 当前要显示条目的位置 0 -> 4
            //newPosition = position % 5
            int newPosition = position % imageViewList.size();
            ImageView img = imageViewList.get(newPosition);
            ViewPager parent = (ViewPager) img.getParent();
            if (parent != null) {
                parent.removeView(img);
            }
            // a. 把View对象添加到container中
            container.addView(img);
            // b. 把View对象返回给框架, 适配器
            return img;
        }
    
    展开全文
  • 出错位置:我的是Fragment类报的这个错: @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ...
  • 错误: The specified child already has a ... You must call removeView() on the child's parent first --------- beginning of crash 2019-11-08 15:54:27.646 9840-9840/com.example.mylayout E/Andro...
  • 当使用addview()的形式... if (view.getParent() instanceof ViewGroup){//多加一个这样的判断 ((ViewGroup)view.getParent()).removeView(view); } linearlayout.addView(view); 希望可以帮到跟我有同样问题的人。。。
  • You must call removeView() on the child’s parent first) 问题描述 正在学kotlin的时候,写了一个简单的弹窗管理框架,但是最近发现弹窗消失后重新show,会出这个bug 解决方案 参考链接:https://st...
  • public class MainForActivity extends FragmentActivity implements OnClickListener{ private Button mTabWeixin; private contentFragment mWeixin; @Override protected void onCreate(Bundle ...
  • FragmentActivity+Fragment 在Fragment生命周期方法 @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState).....
  • 这个问题是说你当前要添加的view已经有一个parent了,所以你只要判断一下当前的view是不是含有的parent了,有的话就把他从父parent移除,代码如下 if (defaultView.getParent() != null) { ((ViewGroup) ...
  • 用recyclerview的时候出现了这个问题:07-03 23:18:25.204: E/AndroidRuntime(8013): java.lang.IllegalStateException: The specified child ... You must call removeView() on the child's parent first.解决...
  • 错误如下图 出现这个错误的原因是自己粗心看看下图不知道答案是不是能出来呢 自己是复制上面的,在插入view的时候还是引用第二个view 导致的。
  • 大意: 在用viewpager做轮播图时,重复添加的问题。出现你要添加的子view,已经有一个父view,一个父view只能添加一个子view,...ViewGroup parent = (ViewGroup) v.getParent(); if (parent != null) { parent.rem...
  • 使用ViewPager的时候很容易出现这... You must call removeView() on the child's parent first. (如有错误之处,欢迎各位当街拍砖或者留言回复哦) 这个错误字面意思很容易理解。  出现这个错误一般是在Vie
  • java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first
  • 也就是说在添加child进去的时候会对添加的child进行判定,如果child.getParent() != null的话就会抛出异常,为什么会出现这种情况呢,由上面的注释可以看出这个方法就是来执行清理孩子的工作的,至于为什么要清理,...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 在做scrollview 滑动停靠的时候 需要addView 报错 其实在做viewpager的时候也遇到过类似的问题 具体报错如下: java.lang.IllegalStateException: The ... You must call removeView() on the child’s parent f
  • 今天遇到了一个问题使用frangment出现了The ... You must call removeView() on the child’s parent first的问题,在stackoverflow找到了解决的方法: … private LayoutInflater mInflater; private WeakRef
  • 在使用ViewPager + Fragment 的... You must call removeView() on the child’s parent first.在解释这个问题之前我们需要了解ViewPager的预加载机制。 ViewPager的预加载机制 ViewPager会预加载当前页面的左右
  • 自定义对话框使用AlertDialog.... 再次show这个对话框出来,会出现标题上的异常,经过多次调试,终于找到的解决的方法,直接上代码.. private AlertDialog ad; ...AlertDialog.Builder ab= new AlertDialog.Builder(thi
  • 这句话翻译过来就是:子view已经存在父视图, 如果你想要用你必须移除父视图。 个人出现问题环境:我是动态生成Imageview 之后添加到ImageViews 数组里然后放到ViewPager ,实现轮播图效果。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,007
精华内容 402
关键字:

thespecifiedchildalreadyhasaparent.youmustcallremoveview()onthe

友情链接: unlocbox-1.7.5.zip