我对使用已弃用的方法感到困惑,我使用的是扩展 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及更高版本......?
答案 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()