v4支持库是否在可用时使用新类?

时间:2012-06-29 14:21:29

标签: android android-fragments android-support-library android-dialogfragment

我知道 v4支持库可用于在旧的Android版本中实现已在更新版本中引入的内容,例如Fragments ..如果我们实现了一个使用< em> v4支持库显示对话框片段,例如,当它在ICS上运行时是否使用最新代码(即原始片段和新片段),还是仍然使用支持每个Android版本的代码?

是否可以在同一个应用程序中使用android.app.Fragment类和android.support.v4.app.Fragment类,如果我们在支持Fragment的版本上运行,则可以在运行时进行区分android或我们在导入 v4支持库时是否只需要使用支持类?

也许我错了,但在最近的平台上运行时,我似乎不想使用最新的代码。

坚持 Dialog Fragment 案例,您认为哪个更好:

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

2)在API级别11或更高级别上运行时使用新的android.app.DialogFragment,并使用showDialog中弃用的onCreateDialogActivity方法在API级别上运行时的类&lt; 11

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

3)在API级别11或更高级别上运行时使用新的android.app.DialogFragment类,并在API级别&lt;上运行时使用android.support.v4.app.DialogFragment类11

如果我有点混乱,我很抱歉,我希望这个问题很清楚......

3 个答案:

答案 0 :(得分:11)

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

修改

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

  

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

链接here

答案 1 :(得分:6)

  

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

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

  

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

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

  

也许我错了,但在最近的平台上运行时,我似乎不想使用最新的代码。

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

  

坚持Dialog Fragment案例,您认为哪个更好:

最好的选择是根本不使用DialogFragment,而是在不使用对话框的情况下找到实现目标的方法。

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

答案 2 :(得分: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。 / p>