【问题标题】:Deprecated method is confusing不推荐使用的方法令人困惑
【发布时间】:2016-07-08 21:27:21
【问题描述】:

我对使用不推荐使用的方法感到困惑,我正在使用扩展 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(Context context) 但现在我很困惑,原因有两个:

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

2-我正在使用 minsdkversion 8 做一个应用程序,我使用了 onAttach(Context context) 方法,它可以在带有 api 8 的模拟器中工作,我在带有 api 16 的智能手机中尝试过它也有效,为什么有效?也许它应该只在版本 23 和更高版本中工作......?

【问题讨论】:

    标签: android android-fragments deprecated android-listfragment


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • Fragments 已经不绑定到 Activity - 请参阅 FragmentControllerFragmentHostCallback。目前,Activity 是唯一在 Android API 中实现它的。
      • 感谢@ianhanniballake 澄清它。我不知道这一点,我只是有一个准确的预感,所以看起来:)
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多