8

我知道v4 支持库可用于在旧的 android 版本中实现在较新版本中引入的东西,例如 Fragments。如果我们实现一个使用v4 支持库来显示Dialog Fragments的应用程序,例如,它在 ICS 上运行时使用最新的代码(即原始和更新的片段)还是仍然使用每个 android 版本的支持代码?

有没有办法在同一个应用程序中同时使用android.app.Fragment类和android.support.v4.app.Fragment类,在运行时区分我们是在支持 Fragment 的 android 版本上运行,还是在导入v4 支持库时只需要使用支持类?

也许我错了,但在我看来,在最近的平台上运行时不使用最新代码似乎不是一个好主意..

坚持Dialog Fragment案例,你觉得哪个更好:

1)使用v4支持库,即在所有android版本上使用兼容代码

2)android.app.DialogFragment在 API 级别 11 或更高级别上运行时使用新的,在 API 级别 < 11 上运行时使用该类的弃用showDialogonCreateDialog方法Activity

正如我已经说过的,最好的恕我直言如下,但是(如果我错了,请纠正我)这不是一个可能的解决方案:

3)android.app.DialogFragment在 API 级别 11 或以上运行时使用新类,android.support.v4.app.DialogFragment在 API 级别 < 11 上运行时使用该类

如果我造成了一些混乱,我很抱歉,我希望这个问题很清楚..

4

3 回答 3

11

当您在项目中使用 android 支持库时,即使设备具有兼容的 Android API 级别,因此不需要使用兼容库,它仍然会使用兼容库中的方法。

编辑

浏览它声明的 Android 支持库 v4 代码(在android.support.v4.app.Fragment类的注释中):

框架的android.app.Fragment 的静态库支持版本。用于编写在 Android 3.0 之前的平台上运行的应用程序。在Android 3.0以上运行时,仍然使用这个实现;它不会尝试切换到框架的实现。有关类概述,请参阅框架 SDK 文档。

链接在这里

于 2012-06-29T14:28:15.920 回答
6

例如,如果我们实现一个使用 v4 支持库来显示 Dialog Fragments 的应用程序,它在 ICS 上运行时是使用最新代码(即原始和更新的片段)还是仍然使用每个 android 版本的支持代码?

特别是对于片段,它总是使用自己的反向端口。在其他情况下,它可能会传递到可用的本机实现。

有没有办法在同一个应用程序中同时使用 android.app.Fragment 类和 android.support.v4.app.Fragment 类,在运行时区分我们是在支持 Fragment 的 android 版本上运行还是我们需要当我们导入 v4 支持库时只使用支持类?

我会坚持支持课程。通过采用替代方法,您将添加大量额外的工作而没有真正的好处。

也许我错了,但在我看来,在最近的平台上运行时不使用最新的代码似乎不是一个好主意。

欢迎您发表意见。对于像片段这样的较大子系统,恕我直言,成本将超过收益。

坚持Dialog Fragment案例,你觉得哪个更好:

最好的选择是根本不使用DialogFragment,而是找到一种方法来完成你想要的而不使用对话框。

在您提出的三个选项中,暂时使用选项#1。一旦您觉得可以放弃对 Android 2.x 的支持,您就可以切换到在整个应用程序中使用原生 Fragment。

于 2012-06-29T14:47:23.683 回答
2

您可以通过以下方式以编程方式查看 API 级别:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.FROYO){
// Do something for froyo and above versions
} else{
// do something for phones running an SDK before froyo
}

然后,您可以通过在代码中写入类的完整名称来复制您的代码以使用您想要的类,即 android.app.DialogFragment 或 android.support.v4.app.Fragment 而不仅仅是 DialogFragment。

于 2012-06-29T14:37:14.927 回答