热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

指定的子项已有父项.你必须首先在孩子的父母上调用removeView()(Android)

如何解决《指定的子项已有父项.你必须首先在孩子的父母上调用removeView()(Android)》经验,为你挑选了4个好方法。

在我的应用程序中,我必须经常在两个布局之间切换.错误发生在下面发布的布局中.

第一次调用我的布局时,没有发生任何错误,一切都很好.当我再调用一个不同的布局(一个空白的布局),然后再次调用我的布局时,它会给我以下错误:

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

我的布局代码如下所示:

    tv = new TextView(getApplicationContext()); // are initialized somewhere else
    et = new EditText(getApplicationContext()); // in the code


private void ConsoleWindow(){
        runOnUiThread(new Runnable(){

     @Override
     public void run(){

        // MY LAYOUT:
        setContentView(R.layout.activity_console);
        // LINEAR LAYOUT
        LinearLayout layout=new LinearLayout(getApplicationContext());
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        // TEXTVIEW
        layout.addView(tv); //  <==========  ERROR IN THIS LINE DURING 2ND RUN
        // EDITTEXT
        et.setHint("Enter Command");
        layout.addView(et);
        }
    }
}

我知道之前已经问过这个问题,但在我的案例中没有帮助.



1> Zielony..:

错误消息说明您应该做什么.

// TEXTVIEW
if(tv.getParent() != null) {
    ((ViewGroup)tv.getParent()).removeView(tv); // <- fix
}
layout.addView(tv); //  <==========  ERROR IN THIS LINE DURING 2ND RUN
// EDITTEXT



2> suku..:

我来到这里是用我的recyclerview搜索错误,但解决方案不起作用(显然).在Recyclerview的情况下,我已经为它写了原因和解决方案.希望它可以帮助某人.

如果onCreateViewHolder()遵循以下方法,则会导致错误:

layoutInflater = LayoutInflater.from(context);
return new VH(layoutInflater.inflate(R.layout.single_row, parent));

相反它应该是

return new VH(layoutInflater.inflate(R.layout.single_row, null));


有时随机答案不完全是问题的答案,可以帮助其他人.这对我有用.谢谢!
将Null传递给负责父项的参数并不是一个坏主意,但你必须知道,在这种情况下,子视图(你膨胀的那个)在某些情况下无法正确测量它,因为它没有了解父母的一切.在某些情况下,它会起作用但在某些情况下不会.

3> Pb Studies..:

只需将attachtoroot参数传递为false即可

View view = inflater.inflate(R.layout.child_layout_to_merge, parent_layout, false);



4> 小智..:

我尝试使用attach to root to true而不是false来提交此消息,如下所示:

return inflater.inflate(R.layout.fragment_profile, container, true)

做完之后:

return inflater.inflate(R.layout.fragment_profile, container, false)

有效.


推荐阅读
author-avatar
mobiledu2502857823
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有