我来自iOS,它很简单,你只需要使用UIViewController。然而,在Android中,事情似乎要复杂得多,特定的API级别有特定的uiccomponent。我正在阅读BigNerdRanch for Android(这本书大约有2年的历史了),他们建议我使用Activity来托管我的FragmentActivities。然而,我认为活动是不赞成的。
那么对于API级别22(至少支持API级别15或16),我究竟应该使用什么来托管组件,以及组件本身呢?所有这些都有用处吗,还是我应该只使用其中一两个?
对于最低API级别为15的情况,您需要使用AppCompatActivity。例如,你的MainActivity看起来是这样的:
public class MainActivity extends AppCompatActivity {
....
....
}
要使用AppCompatActivity,请确保您下载了谷歌支持库(您可以在您的Tools -> Android -> SDK管理器中检查这一点)。然后在你的应用的gradle中包含gradle依赖。构建文件:
compile 'com.android.support:appcompat-v7:22:2.0'
你可以使用这个AppCompat作为你的主活动,然后它可以用来启动Fragments或其他活动(这取决于你正在构建的应用类型)。
《BigNerdRanch》这本书是一个很好的资源,但是是的,它已经过时了。阅读它可以获得关于Android如何工作的一般信息,但不要期望他们使用的特定类是最新的。
我以为Activity被弃用了
No.
那么对于API级别22(至少支持API级别15或16),我究竟应该使用什么来托管组件,以及组件本身呢?所有这些都有用处吗,还是我应该只使用其中一两个?
活动是基线。每个activity都直接或间接地继承自activity。
FragmentActivity用于在support-v4和support-v13库中找到的片段的后端口。片段的本机实现是在API级别11中添加的,这比您建议的minSdkVersion值要低。需要特别考虑FragmentActivity的唯一原因是如果您想使用嵌套片段(一个片段包含另一个片段),因为在API级别17之前,原生片段不支持嵌套片段。
AppCompatActivity来自appcompat-v7库。主要来说,这提供了一个操作栏的后端口。由于本机操作栏是在API Level 11中添加的,因此不需要AppCompatActivity。然而,当前版本的appcompat-v7还在操作栏和各种小部件方面增加了材料设计美学的有限后端口。使用appcompat-v7有优点和缺点,这远远超出了这个特定的Stack Overflow答案的范围。
ActionBarActivity是appcompat-v7中基本活动的旧名称。由于种种原因,他们想要改名。除非你使用的第三方库坚持使用ActionBarActivity,否则你应该更喜欢AppCompatActivity而不是ActionBarActivity。
因此,给定你的minSdkVersion在15-16范围内:
如果你想要反向移植的材质设计外观,请使用AppCompatActivity
如果不是,但你想要嵌套的片段,使用FragmentActivity
如果没有,使用Activity
AppCompatActivity扩展FragmentActivity,所以任何需要使用FragmentActivity特性的人都可以使用AppCompatActivity。
Activity是所有其他Activity的基类,我不认为它会被弃用。它们之间的关系是:
Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity
'<-'在这里表示继承。参考说ActionBarActivity已弃用,改用AppCompatActivity。
所以基本上,使用AppCompatActivity总是正确的选择。它们之间的区别是:
活动是最基本的。
基于Activity, FragmentActivity提供了使用Fragment的能力。
基于FragmentActivity, AppCompatActivity为ActionBar提供了一些特性。