我已经将 SDK 更新为最新版本(API 23) ,而且不推荐使用针对片段的 onAttach(Activity)
方法。因此,我现在使用的是 onAttach(Context)
,而不是使用这个方法,但是这个方法在生命周期中不会被调用。活动是来自 v7的 AppCompatActivity
实例,片段是类片段(android.app.Fragment
)的实例。
有什么办法让 onAttach
在 API 23中工作吗?
解决方案
我找到了一些可以帮助你理解和解决这个问题的答案:
解决方案:
使用 getSupportFragmentManager ()将强制您使用支持库中的片段。因此,第一个解决方案是使用 support lib 中的片段替换所有片段,并使用 getSupportFragmentManager ()。
我已经实现的解决方案是处理2种可能性 (1。应用程序在 API < 23的设备上运行,应用程序在 API > = 23的设备上运行。
简而言之,在我的实现中,我为项目的所有片段创建了一个基类,并在其中添加了以下代码:
/*
* onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
* Use onAttachToContext instead
*/
@TargetApi(23)
@Override
public final void onAttach(Context context) {
super.onAttach(context);
onAttachToContext(context);
}
/*
* Deprecated on API 23
* Use onAttachToContext instead
*/
@SuppressWarnings("deprecation")
@Override
public final void onAttach(Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
onAttachToContext(activity);
}
}
/*
* Called when the fragment attaches to the context
*/
protected void onAttachToContext(Context context) {
}
现在,我只需在需要它的所有片段上覆盖 onAttachToContext (Context)方法。