2013-03-20 81 views
18

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

我开始知道,我们不应该多次使用setContentView方法进行同样的活动。虽然它对我来说工作得很好。

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

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

+0

不是我知道它会导致任何异常。 (除了OutOfMemory异常外,如果你在系统内存不足的情况下这样做)。让我们听听其他人的说法。 – Calvin 2013-03-20 09:35:01

+0

相关:http://stackoverflow.com/q/6811989/783284 – Cody 2013-03-20 09:41:10

回答

2

我想交换意见是不是一个好主意,因为Android平台已经拥有了强大的框架来处理在视图之间并保持与该活动相关联的每个视图的状态过渡的始终是更好地与现有的框架,坚持,而不是想到一些复杂的实施,你必须经历所有这些事情。如果在应用程序中不需要这些东西,并且只有在整个应用程序中只有两个或三个屏幕,则可以尝试切换视图。即使你的视图是如何构建的,如果你有复杂的逻辑和创建这些视图所需的大量数据,这不会是一个很好的方法。更多的事情,如果你添加更多的视图,说你的应用程序的功能负载需要处理的活动会走高。在这种情况下,您将声明并初始化该特定活动中的所有视图,以便维护所有这些视图实例非常重要。如果你想了解更多关于活动和任务的信息,请亲切点击refer this link

+3

换句话说,改变视图可能意味着你也改变了一些逻辑,因此,一个新的活动更适合。 – adrianp 2013-03-20 09:45:50

+0

我想知道更改视图后分配给以前的视图的内存将被释放或不.and另外一件事情,这个过程将导致任何内存异常。可以澄清这两个问题。因为我使用setContentView方法来更改观点。 – 2013-03-20 09:47:01

+0

你会得到内存异常吗? – Neil 2013-03-20 09:49:04

0

那么每次你调用setContentView()时,你都必须再次找到所有的布局,除此之外,我认为你可以“做”它。但正如讨论here这是虐待劝告,因为它明显违背了android准则。另外Commonsware有一些非常重要的点here其中最重要的一点是,当你忘记从视图中清理东西等时,你会容易泄漏内存,而Android通常会为你处理这些东西。

总之你应该遵循Android指南和使用Fragments或开始新的Activity

0

按照developer docs的setContentView(INT layoutResID)用于

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

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

的的setContentView引述回答你的活动实际上是调用由活动,这本身并不仅仅是充气布局更大量使用的窗口中的setContentView。

我建议你找一个替代的方式来切换布局就像使用与Fragments一个ViewPager或一些其他的Tab键的方法,但最终这一切都归结到你想要做什么。

This问题也可能会给你你正在寻找什么。