更改同一活动中的布局文件

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

我开始知道我们不应该多次使用setContentView方法来进行相同的活动。 虽然它对我来说工作正常。

任何人都可以解释为什么我们不应该多次使用setContentView方法为同一活动更改视图?

它会创build任何内存相关的exception吗? 有人可以澄清?

Solutions Collecting From Web of "更改同一活动中的布局文件"

我认为切换视图不是一个好主意,因为android平台已经有了强大的框架来处理视图之间的转换,并保持与Activity相关联的每个视图的状态,总是更好地坚持现有框架而不是考虑一些复杂的实现,你必须经历所有这些事情。 如果在应用程序中不需要这些东西,并且只有在整个应用程序中只有两个或三个屏幕,则可以尝试切换视图。 即使你的视图是如何构build的,如果你有复杂的逻辑和大量的数据需要创build这些视图这不会是一个好办法做到这一点。更多的事情,如果你添加更多的视图说function为您的应用程序的负载需要处理的活动会走高。 在这种情况下,您将声明并初始化该特定活动中的所有视图,以便维护所有这些视图实例。 如果你想了解更多关于活动和任务请参考这个链接

那么每次你调用setContentView()时,你都必须重新find所有的布局,除此之外,我认为你“可以”做到这一点。 但正如在这里讨论的,这是不好的build议,因为它明显违背了android的指导方针。 此外Commonsware有一些非常重要的一点,其中最重要的一点是,当你忘记从视图中清理东西时,你将容易泄漏内存,而Android通常会为你处理这些东西。

总之,你应该遵循Android的指导方针和使用片段或开始一个新的Activity

根据开发人员的文档 setContentView(int layoutResID)是用来

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

在最佳实践中,此方法用于在启动时膨胀Activity布局。 这并不意味着如果继续使用这种方法,将来会导致问题。 在这个问题上引用一个答案

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

我build议你find一种替代方法来切换布局,比如使用带FragmentsViewPager或者其他ViewPager方法,但最终这一切都归结于你想要做的事情。

这个问题也可能会给你你想要的。