我一直在构建一个直到最近都有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中的类?并且有区别吗?
答案 0 :(得分:3)
由于现在你想支持Gingerbread和更低版本,你有使用android.support.v4.app.*
Fragment类来编译和运行你的应用程序。
对getFragmentManager()
的调用也应替换为getSupportFragmentManager()
同样重要的是要注意,调用getSupportFragmentManager()
只是FragmentActivity
和ActionBarActivity
的一部分(后者是前者的扩展。它是Google的ActionBarCompat库的一部分)
这是因为支持片段是Android系统的补充,因此需要有一种方法来实现它们而不必过多依赖Android内部(因为Gingerbread和lower不具备Fragment
的概念)。
但这很奇怪,因为如果我在一个内部类上使用它(我有 DialogFragments)它会同时消除错误。那是为什么?
您可能遇到多个Android Lint错误
如果我在更高的API上运行我的应用程序
,会怎么做?
没有,支持库也适用于新的API版本。当然,如果你以前的代码 required API 11+,那么你需要找到一种方法来反向移植它。
应用程序是否会使用兼容性库,或者它是否可以使用 那个API的类?
支持Fragment
documentation说:
在Android 3.0或更高版本上运行时,此实现仍然存在 用过的;它不会尝试切换到框架的实现。
将始终使用支持片段。通常,这不是问题。