setContentView() 删除使用 addView() 添加的元素

Posted

技术标签:

【中文标题】setContentView() 删除使用 addView() 添加的元素【英文标题】:setContentView() deletes elements which have been added with addView() 【发布时间】:2018-09-08 10:00:24 【问题描述】:

我的项目有 2 个布局。两者都有一个使用 setContentView 方法在彼此之间交换的按钮。每当我在这两种布局之间切换时,我使用 addView() 添加的每个 UI 元素都会丢失。但是静态 XML 元素仍然存在。

【问题讨论】:

那是因为布局被重新膨胀,当你调用 setContentView(R.layout.xml) 时,所有的视图都在 xml 中指定,这是在幕后发生的,所有动态添加的视图都将是走了。所以你需要在调用 setContentView() 后再次添加它们。 @HedShafran 是的,我知道,但必须有其他方法来解决这个问题。 这两种布局可以相互叠加,您可以切换它们的可见性。使用 GONE 隐藏布局,而不是 INVISIBLE 如果布局上有可点击的元素。 @HedShafran 您的回答是我的解决方案。您可以发布它,以便我接受它作为答案。 仅供参考:您不应该多次调用setContentView() - 只需在Activity onCreate() 方法中调用一次。 【参考方案1】:

这是因为布局重新膨胀,当您调用 setContentView(R.layout.xml) 时,所有视图都在 xml 中指定,这是在幕后发生的,所有动态添加的视图都将消失。

可选解决方案:

    调用 setContentView() 后再次添加视图。 这两种布局可以相互叠加,您可以切换它们的可见性。使用 GONE 隐藏布局,而不是 INVISIBLE 如果布局上有可点击的元素。

【讨论】:

以上是关于setContentView() 删除使用 addView() 添加的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段而不是活动中使用 setContentView

setContentView() 与 XML 布局与视图

Android 通知 setContentView

Andriod——setContentView( )方法

(BEGINNER) 调用 setContentView 时出错?

对话框中的 setContentView() 不显示