弃用的方法令人困惑

Deprecated method is confusing

我对使用已弃用的方法感到困惑,我正在使用 class 扩展 ListFragment class 并且我实现 onAttach() 方法,该方法有两个 "versions"

@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(Context context) 但现在我'我困惑有两个原因:

1- 如果我想用 minsdkversion 8 和 targetsdkversion 24 做一个应用程序,我应该实现什么方法?

2-我正在用 minsdkversion 8 做一个应用程序,我使用了 onAttach(Context context) 方法,它在 api 8 的模拟器中工作,并且我在 api 16 的智能手机上试过,它也能用,为什么能用?也许它只适用于版本 23 及更高版本...?

1- If I want to do an application with minsdkversion 8 and targetsdkversion 24 what method I should implement?

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

2-I'm doing an app with minsdkversion 8 and I used the onAttach(Context context) method and it works in an emulator with api 8 and I tried in a smartphone with api 16 and It works too, Why it works? perhaps It should work only in version 23 and higher...?

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

至于方法弃用,这背后的原因可能是有一天 Fragments 可能不限于仅附加到活动(只是一个疯狂的猜测),让方法采用 Context 参数是第一步朝着那个方向。

如果您使用 Support Library ListFragment, then you can use onAttach(Context) on all API 4+ devices. If you are using the framework ListFragment,那么 onAttach(Context) 方法 在 pre-API 23 设备上失败,因为它不存在.

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

我知道这不能回答你的问题,但我停止使用 onAttach() 来获取对调用 Activity...

的引用

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

所以,当我需要调用 activity 的参考时,我开始调用 getActivity()... 这样,您就不需要覆盖 onAttach()