3 回答

TA贡献1803条经验 获得超6个赞
Activity是一个上下文,所以如果你只是检查上下文是一个Activity并在必要时强制转换它。
@Overridepublic void onAttach(Context context) { super.onAttach(context); Activity a; if (context instanceof Activity){ a=(Activity) context; }}
更新:有些人声称Context
永远不会调用新的覆盖。我已经完成了一些测试,并且无法找到这样的场景,根据源代码,它永远不应该是真的。在我测试的所有情况下,SDK23之前和之后,都调用了它们Activity
和Context
版本onAttach
。如果您可以找到不是这种情况的场景,我建议您创建一个示例项目来说明问题并将其报告给Android团队。
更新2:我只使用Android支持库片段,因为错误在那里更快修复。如果你使用框架片段,那么上面的问题似乎没有被正确调用覆盖。

TA贡献1812条经验 获得超5个赞
这是谷歌从另一个巨大的变化......所建议的修改:更换onAttach(Activity activity)
用onAttach(Context context)
,因为我坠毁在旧的API的应用程序onAttach(Context context)
在本地碎片将不会被调用。
我正在使用本机片段(android.app.Fragment),因此我必须执行以下操作以使其在旧API上再次工作(<23)。
这是我做的:
@Overridepublic void onAttach(Context context) { super.onAttach(context); // Code here}@SuppressWarnings("deprecation")@Overridepublic void onAttach(Activity activity) { super.onAttach(activity); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // Code here }}

TA贡献1775条经验 获得超8个赞
如果使用框架片段且设备的SDK版本低于23,则OnAttach(Context context)
不会被调用。
我使用支持片段代替,因此弃用是固定的并且onAttach(Context context)
总是被调用。
- 3 回答
- 0 关注
- 2796 浏览
添加回答
举报