弃用的方法令人困惑

时间:2016-07-08 21:27:22

标签: android android-fragments deprecated android-listfragment

我对使用已弃用的方法感到困惑,我使用的是扩展 ListFragment 类的类,并且我实现了 onAttach( )方法,该方法有两个"版本"

@Override
public void onAttach(Context context) {
        super.onAttach(context);
    //This method requires api level 23 or higher
}

@Override
public void onAttach(Activity activity) {
        super.onAttach(activity);
    //This method was deprecated in API level 23.
}

我已经阅读了有关弃用方法的内容,并且我了解它将在以后的版本中删除,然后我决定使用 onAttach(上下文上下文),但现在我和#39;混淆有两个原因:

1-如果我想使用minsdkversion 8和targetsdkversion 24进行应用程序我应该采用哪种方法?

2-I我正在使用minsdkversion 8进行应用程序并且我使用了 onAttach(上下文上下文)方法,它在带有api 8的模拟器中工作,我尝试使用api的智能手机16它也有效,为什么有效?也许它应该仅适用于版本23及更高版本......?

3 个答案:

答案 0 :(得分:3)

如果您使用Support Library ListFragment,则可以在所有API 4+设备上使用onAttach(Context)。如果您使用的是framework ListFragment,那么{23}设备上的onAttach(Context)方法失败,因为它不存在。

我怀疑,既然您已确认onAttach(Context)适用于较旧的API级别,那么您已经在使用支持片段。

答案 1 :(得分:1)

  

1-如果我想使用minsdkversion 8和targetsdkversion 24进行应用程序我应该采用哪种方法?

始终使用不推荐的方法。 Android程序员注意它是向后兼容的。

  

2 - 我正在使用minsdkversion 8进行应用程序,我使用onAttach(上下文上下文)方法,它在带有api 8的模拟器中工作,我尝试使用api 16的智能手机,它也可以工作,为什么它工作?也许它应该仅适用于版本23及更高版本......?

最明显的原因可能是向后兼容性和a Context是一个比Activity更广泛的实体。这是因为Activity实现了Context接口,因此只要需要Context,您就可以提供Activity。这可能就是为什么使用带有Context的版本可以使用较低的API。

至于方法弃用,其背后的原因可能是有一天片段可能不仅限于仅附加到活动(只是一个疯狂的猜测),并且让方法采用Context参数是迈向该方法的第一步

答案 2 :(得分:0)

我知道它没有回答你的问题,但我停止使用onAttach()获取对调用Activity的引用...

我注意到我持有对Activity的引用,但我在极少数地方使用它......

所以,当我需要引用调用活动时,我开始调用getActivity() ...这样,您就不需要覆盖onAttach()