android - 在 API 10 中添加对 Fragments 的支持

标签 android android-fragments android-compatibility

我一直在构建一个应用程序,直到最近才有 minSdkVersion="14",但我想更改它并添加 api 10 的兼容性。我遇到的第一个问题是样式,但我sort-off 使用 Theme.AppCompat 修复了这个问题。现在我的代码遇到了问题,第一个是我使用了很多 fragment 。

出现在我的应用程序中的第一个 fragment 是:

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

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

此外,如果我将所有 Fragment 扩展类更改为 android.support.v4.app.Fragment、.DialogFragment、.ListFragment... 那会怎样?如果我在更高的 API 上运行我的应用程序(假设是 19),该怎么办?应用程序会使用兼容性库还是知道使用该 API 中的类?有什么区别吗?

最佳答案

既然您现在想要支持 Gingerbread 及更低版本,您必须使用 android.support.v4.app.* fragment 类来让您的应用编译和运行。 对 getFragmentManager() 的调用也应替换为 getSupportFragmentManager()

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

这是因为,由于支持 Fragments 是 Android 系统的附加功能,因此需要一种方法来实现它们,而不会过多依赖 Android 内部(因为 Gingerbread 及更低版本没有 Fragment)。

but it's weird because if i use it on one inner class (i have the DialogFragments) it takes the error away on both. Why is that?

您可能遇到多个 Android Lint 错误

What would that do in case i run my app on a higher API

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

Would the app use the compatability library or would it know to use the class from that API?

支持Fragment documentation说:

When running on Android 3.0 or above, this implementation is still used; it does not try to switch to the framework's implementation.

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

关于android - 在 API 10 中添加对 Fragments 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448364/

相关文章:

android - 如何使用填充的后台启动 Activity ?

Android NDK C++ openGL ES 2 上下文显示效果不佳

java - 一旦按下手机的后退按钮,ViewPager 不会生成 UI

android - 使用带有最新支持库的 admob 15.0.0 时发生 Gradle 冲突

java - Gradle 同步失败 : Unable to find method

android - 默认情况下,如何使用手动(键盘)输入显示时间选择器对话框?

android - 如何在运行时将两个 fragment 添加到 frameLayout 中

java - Greenrobot EventBus 无法调度事件

android - AndroidX 中的 Canvas clipOutRect 兼容性

android - StrictMode 策略违规 : android. os.strictmode.NonSdkApiUsedViolation: Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(