在API 10中添加对Fragments的支持

时间:2013-12-08 00:19:49

标签: android android-fragments android-compatibility

我一直在构建一个直到最近都有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中的类?并且有区别吗?

1 个答案:

答案 0 :(得分:3)

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

同样重要的是要注意,调用getSupportFragmentManager()只是FragmentActivityActionBarActivity的一部分(后者是前者的扩展。它是Google的ActionBarCompat库的一部分)

这是因为支持片段是Android系统的补充,因此需要有一种方法来实现它们而不必过多依赖Android内部(因为Gingerbread和lower不具备Fragment的概念)。

  

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

您可能遇到多个Android Lint错误

  

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

,会怎么做?

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

  

应用程序是否会使用兼容性库,或者它是否可以使用   那个API的类?

支持Fragment documentation说:

  

在Android 3.0或更高版本上运行时,此实现仍然存在   用过的;它不会尝试切换到框架的实现。

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