猿问

Android Fragment onAttach()已弃用

Android Fragment onAttach()已弃用

我已经更新了我的应用程序以使用最新的支持库(版本23.0.0),我发现他们已经弃用了Fragment类的onAttach()函数。

代替:

onAttach (Activity activity)

下雪了:

onAttach (Context context)

由于我的应用程序使用了弃用之前传递的活动,我认为可能的解决方案是:

@Overridepublic void onAttach(Context context) {
    super.onAttach(context);
    activity = getActivity();}

这是正确的方法吗?

更新:

如果我运行API低于23的设备,则甚至不会调用新的onAttach()。我希望这不是他们打算做的!

更新2:

问题已通过SDK的最新更新得到解决。

我已经在我的API 22设备上进行了测试,并且正在调用onAttach(Context)。

点击此处查看我几周前开设的错误报告以及Google员工的答案。


慕标琳琳
浏览 2790回答 3
3回答

慕码人8056858

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支持库片段,因为错误在那里更快修复。如果你使用框架片段,那么上面的问题似乎没有被正确调用覆盖。

慕雪6442864

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

www说

如果使用框架片段且设备的SDK版本低于23,则OnAttach(Context context)不会被调用。我使用支持片段代替,因此弃用是固定的并且onAttach(Context context)总是被调用。
随时随地看视频慕课网APP

相关分类

Android
我要回答