2

我一直在构建一个直到最近才有的应用程序minSdkVersion="14",但我想改变它并为 api 10 添加兼容性。我遇到的第一个问题是样式,但我通过使用Theme.AppCompat. 现在我的代码有问题,第一个是我使用了很多片段。

我的应用程序中出现的第一个片段是:

FirstRunNotice firstRunNotice = new FirstRunNotice();
firstRunNotice.show(getFragmentManager(), "WhatDoesThisStringEvenDo?");
//.show method gives an error

这只是我活动中扩展的内部类DialogFragment。我如何在 API 10 上进行这项工作?如果我将其更改为android.support.v4.app.DialogFragment它似乎可以消除错误(使用 Android Studio),但这很奇怪,因为如果我在一个内部类(我有 DialogFragments)上使用它,它会消除两者的错误。这是为什么?

另外,如果我要将所有Fragment扩展类更改为android.support.v4.app.Fragment, .DialogFragment, .ListFragment……如果我在更高的 API 上运行我的应用程序,比如说 19,那会怎样?应用程序会使用兼容性库还是知道使用该 API 中的类?有区别吗?

4

1 回答 1

3

由于现在您想要支持 Gingerbread 及更低版本,因此您必须使用android.support.v4.app.*Fragment 类来编译和运行您的应用程序。调用getFragmentManager()也应该替换为getSupportFragmentManager()

还需要注意的是,调用getSupportFragmentManager()只是FragmentActivityand的一部分ActionBarActivity(后者是前者的扩展。它是 Google 的 ActionBarCompat 库的一部分)。

这是因为由于支持 Fragments 是对 Android 系统的补充,因此需要一种方法来实现它们,而无需过多依赖 Android 内部(因为 Gingerbread 和更低版本没有 a 的概念Fragment)。

但这很奇怪,因为如果我在一个内部类(我有 DialogFragments)上使用它,它会消除两者的错误。这是为什么?

您可能会遇到多个 Android Lint 错误

如果我在更高的 API 上运行我的应用程序会怎样

没什么,支持库也适用于新的 API 版本。当然,如果您以前的代码需要API 11+,那么您也需要找到一种方法来反向移植它。

应用程序会使用兼容性库还是知道使用该 API 中的类?

支持Fragment 文档说:

在Android 3.0以上运行时,仍然使用这个实现;它不会尝试切换到框架的实现。

将始终使用支持片段。通常,这不是问题。

于 2013-12-08T00:29:00.297 回答