我一直在构建一个应用程序,直到最近才有 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/