我来自iOS,它很简单,你只需使用UIViewController.然而,在安卓系统中,事情似乎要复杂得多,有特定API级别的特定组件.我正在读Android版的BigNerdRanch(这本书大约有2年历史),他们建议我用Activity来托管我的FragmentActivities.然而,我认为Activity是不赞成的.

那么对于API级别22(至少支持API级别15或16),我应该使用什么来承载组件,以及组件本身呢?所有这些都有用途吗?或者我应该只使用一两个吗?

推荐答案

我以为活动不受欢迎

那么对于API级别22(至少支持API级别15或16),我应该使用什么来承载组件,以及组件本身呢?所有这些都有用途吗?或者我应该只使用一两个吗?

Activity是基线.每个活动都直接或间接地从Activity继承.

FragmentActivity用于support-v4support-v13库中片段的后端口.片段的本机实现是在API级别11中添加的,这低于您建议的minSdkVersion值.你需要特别考虑FragmentActivity的唯一原因是,如果你想使用嵌套的片段(保存另一个片段的片段),因为在API级别17之前在原生片段中不支持.

AppCompatActivity来自appcompat-v7图书馆.基本上,这提供了操作栏的一个后端口.由于本机操作栏是在API级别11中添加的,因此不需要AppCompatActivity.然而,appcompat-v7的当前版本在动作栏和各种小部件方面也添加了有限的material 设计美学背景.使用appcompat-v7有优点和缺点,远远超出了这个特定堆栈溢出答案的范围.

ActionBarActivityappcompat-v7中基本活动的旧名称.出于各种原因,他们想改名.除非你正在使用的第三方库坚持使用ActionBarActivity,否则你应该 Select AppCompatActivity而不是ActionBarActivity.

所以,假设你的minSdkVersion分在15-16之间:

  • 如果你想要后端口material 设计的外观,使用AppCompatActivity

  • 如果不是,但您想要嵌套片段,请使用FragmentActivity

  • 如果没有,请使用Activity

只需从 comments 中添加注释:AppCompatActivity扩展了FragmentActivity,所以任何需要使用FragmentActivity功能的人都可以使用AppCompatActivity.

Android相关问答推荐

当我的Log.i()不在主线程中时,如何在我的logcat中显示它?

Android深度链接配置中的URL片段匹配'

Android事件:APP_SCOUT_HANG警告SQLite

Android Studio中的Kotlin版本不兼容错误:需要元数据1.9.0,但找到1.6.0

StateFlow和LazyColumn重组

Play store 的 Play 完整性与 Firebase 应用判断 Play 完整性

使用 Jetpack Compose 在 Android TV 上启用系统声音

参数化类RecyclerView.Adapter的原始使用

需要在按钮 onclick 上从 string.xml 获取值. @Composable 调用只能在@Composable 函数的上下文中发生

如何仅同步 local_manifest.xml?

appcompat 依赖从何而来?

如何在 JetpackCompose 的 LazyColumn 中 Select 多个项目

Jetpack Compose 中的滑动按钮菜单

调用时 listFiles() nullpointerexception

Material Design 网站的新设计已启动,但我找不到实现选项卡,该选项卡在哪里?

compose 更改列表元素但lazyColumn不更改

房间创建三四表关系

在开发过程中我应该把 mp4 文件放在哪里?

如何让用户与任意应用程序共享文件?

如何增加 BottomSheetDialog 的高度以跟随垂直平移