作者:mobiledu2502857823 | 来源:互联网 | 2023-05-25 17:30
在我的应用程序中,我必须经常在两个布局之间切换.错误发生在下面发布的布局中.
第一次调用我的布局时,没有发生任何错误,一切都很好.当我再调用一个不同的布局(一个空白的布局),然后再次调用我的布局时,它会给我以下错误:
> 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)
有效.