19

我正在使用setContentView(R.layout.main)在同一活动中切换视图。我正在调用一些异步任务并在主布局文件上填充数据,之后我通过调用setContentView(R.layout.main)方法更改视图。

我开始知道我们不应该setContentView对同一活动多次使用方法。虽然它对我来说很好用。

谁能解释为什么我们不应该setContentView对同一个活动多次使用方法来改变视图?

它会创建任何与内存相关的异常吗?有人可以澄清一下吗?

4

3 回答 3

2

我认为切换视图不是一个好主意,因为 android 平台已经有强大的框架来处理视图之间的转换并维护与 Activity 关联的每个视图的状态,最好坚持使用现有框架而不是考虑一些您必须通过复杂的实现来完成所有这些事情。如果您不需要在应用程序中处理任何这些事情,并且仅当您的整个应用程序中只有两个或三个屏幕时,您可以尝试切换视图。如果您有复杂的逻辑和创建这些视图所需的大量数据,即使基于您的视图的结构,这也不是一个好方法。如果您要添加更多视图,那么另一件事就是向您的应用程序说明功能负载需要处理的Activity会走高。在这种情况下,您将声明并初始化该特定 Activity 中的所有视图,因此维护所有这些视图实例很繁重。如果您想了解更多关于活动和任务的信息参考这个链接

于 2013-03-20T09:38:04.323 回答
0

根据开发人员文档setContentView(int layoutResID) 用于

从布局资源中设置活动内容。资源将被膨胀,将所有顶级视图添加到活动中。

在最佳实践中,此方法用于Activity在启动时膨胀您的布局。这并不意味着如果您继续使用此方法,它将在未来引起问题。引用这个问题的答案

Activity 上的 setContentView 实际上调用了 Activity 使用的 Window 上的 setContentView,它本身所做的不仅仅是膨胀布局。

我建议您找到一种替代方法来切换布局,例如使用ViewPagerwithFragments或其他一些 Tabbing 方法,但最终这一切都取决于您想要做什么。

这个问题也可能会给你你正在寻找的东西。

于 2013-03-20T09:46:09.360 回答
0

好吧,每次您调用 setContentView() 时,您都必须再次找到所有布局,除了我认为您“可以”做到这一点。但正如这里所讨论的,这是不明智的,因为它显然违反了 android 指南。Commonsware 在这里也有一些非常重要的点,其中最重要的一点是,当您忘记清理视图中的内容等时,您很容易发生内存泄漏,而 Android 通常会为您处理这些内容。

简而言之,您应该遵循 Android 指南并使用Fragments或开始一个新的Activity.

于 2013-03-20T09:44:41.747 回答