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

时间:2013-03-20 09:27:44

标签: android layout android-view

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

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

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

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

3 个答案:

答案 0 :(得分:2)

我认为切换视图并不是一个好主意,因为android平台已经拥有强大的框架来处理视图之间的转换并维护与Activity关联的每个视图的状态,它总是更好地坚持使用现有框架而不是考虑一些复杂的实现,你必须经历所有这些事情。如果您在应用程序中不需要任何这些操作,并且只有在整个应用程序中只有两个或三个屏幕时,您可以尝试切换视图。如果你有创建这些视图所需的复杂逻辑和大量数据,那么即使你的视图是如何构建的,这也不是一个很好的方法。如果你要添加更多视图,还有更多的事情说你的应用程序的功能是负载那么需要处理的活动会很高。在这种情况下,您将声明并初始化该特定Activity内的所有视图,因此维护所有这些视图实例很重。如果您想要了解有关Activty和Task的更多信息refer this link

答案 1 :(得分:0)

每次调用setContentView()时,除了我认为你“可以”执行它之外,你还必须再次找到所有布局。但正如所讨论的那样here这是生病建议,因为它显然违反了Android指南。此外,Commonsware还有一些非常重要的要点here最重要的一点是,当你忘记清理你通常会为你处理的视图等内容时,你会容易泄漏内存。

简而言之,您应遵循Android准则并使用Fragments或开始新的Activity

答案 2 :(得分:0)

根据developer docs setContentView(int layoutResID)用于

  

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

在最佳实践中,此方法用于在启动时对Activity布局进行充气。如果继续使用此方法,这并不意味着将来会引起问题。在this问题

中引用答案
  

Activity上的setContentView实际上调用了活动使用的Window上的setContentView,它本身不仅仅是对布局进行充气。

我建议您找到一种替换方法来切换布局,例如使用ViewPagerFragments或其他Tabbing方法,但最终归结为您想要做的事情。

This问题也可能会为您提供所需内容。