Android 片段与复合控件
Posted
技术标签:
【中文标题】Android 片段与复合控件【英文标题】:Android fragments vs compound controls 【发布时间】:2011-09-07 01:43:06 【问题描述】:为什么要使用 android 3.0 片段而不是复合控件?可以一次创建一个 View 继承器或复合控件,然后在任何地方使用它。
我已阅读http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html,但没有找到答案。
【问题讨论】:
我已经在另一个问题中回答了这个问题。请参阅***.com/a/14912608/909956T;dr - 有时片段允许您创建比依赖自定义视图实现更多的可重用组件。请参阅链接答案了解原因。 【参考方案1】:不同之处在于片段有自己的生命周期(onPause、onCreate、onStart...)。通过拥有一个生命周期,片段可以独立响应事件,通过 onSaveInstanceState 保存它们的状态,并被带回(例如在来电后恢复或用户单击返回按钮时)。生命周期总结在片段文档中:
https://developer.android.com/guide/components/fragments.html#Lifecycle
您始终可以将片段或活动包装在复合视图周围,因此只需将片段视为复合视图的容器,从而为它们提供独立的生命周期。
【讨论】:
我在***.com/a/15824301/618881 回答了一个类似的问题。有人评论说 Android 4.2 (API 17) 现在允许嵌套片段。 一个片段可以包含另一个片段。所以当你说片段不能嵌套时,我不确定你指的是什么。也许当你写这篇文章时,那是真的? @StealthRabbi,自从 Android 4.2 (API 17) 中添加了嵌套片段支持以来,我已经删除了该警告。【参考方案2】:原因是在平板电脑和手机上使用相同的代码。这些设备有不同的布局注意事项,Fragment 允许您考虑这一点,并让您的应用程序表现不同,而无需重写任何代码。
【讨论】:
AFAIK,您可以在 android 2.x 和 3.x 应用程序中使用相同的复合控件。如果是碎片,您必须使用碎片回兼容 jar。那么,如果已经有机会使用现成的 UI 块作为复合控件,那还有什么意义呢? 我的意思是它们的用途完全不同。您可以组合片段和自定义控件,但其中一个不能代替另一个。 抱歉,没听清楚。为什么不为每个屏幕尺寸(正常/大/超大)创建单独的布局?如果我使用以上是关于Android 片段与复合控件的主要内容,如果未能解决你的问题,请参考以下文章
android:layout_margin真实含义 及 自己定义复合控件 layout()运行无效的问题解决