虽然fragment是在Android 3.0中引入的,而且在之前的API版本中没有,但Google提供了Support Package使得老版本的Android设备也能够使用fragment功能,这也是fragment最重要的特征之一。
但是,Support Package并非没有瑕疵。使用Support Package运行的应用即使在Android 3.0系统上也需要该Support Package。当选择Support Package的实现策略时,Google面临着一大难题。即使可以实现一款允许应用从Android 3.0到Android 2.0都不需要任何修改,就能够透明移植的Support Package,还是会存在问题。应用必须将Support Package作为它的一部分。如果Support Package中定义的类名称和Android 3.0中的类名称完全相同,那么嵌入该Support Package的应用如果不做一些类加载的特殊处理,就会出现定义的类名称和系统中的冲突的问题。
因此,Support Package使用了一个不同的基础包android.support.v4来定义兼容性功能。在Android 3.0上开发的程序需要修改代码才能够使用Support Package。你至少需要做出以下变化:
·把Support Package库复制到你的项目中。在项目最上层创建名为lib的目录,从Android SDK目录extras/android/compatibility/v4/中复制android-support-v4.jar到该lib目录中。
·把Support Package添加到你的项目build path中。在Eclipse中,选择Package Explorer视图下的library(可能需要刷新项目才能看到它:按下F5键或单击Refresh)。一旦选中了library,就可以单击Build Path→Add to Build Path。
·以上操作的快捷方式是:在应用内,通过Package Explorer,依次单击Android Tools→Add Compatibility Library。
·把项目的build target从Android 3.0改成Android 2.0.1(Properties→Android)。这个操作会产生很多错误。
·一些指向android.app的输入需要更新为指向android.support.v4.app。如果你的程序在修改build target之前没有错误,则只需要找出错误的输入,更新其基础包。
·应用中使用fragment的所有活动必须把类Activity更新为其子类FragmentActivity。
·改变所有getFragmentManager的调用为getSupportFragmentManager。
·修复其他错误,测试应用程序。