问题描述
Activity 是一个上下文,所以如果您可以简单地检查上下文是一个 Activity 并在必要时进行转换。
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
}
}
有些人声称Context
永远不会调用新的覆盖。我已经做了一些测试,但找不到这样的场景,根据源代码,它永远不应该是真的。在我测试的所有情况下,SDK23
之前和之后Activity
的Context
版本都onAttach
被调用了。如果您能找到并非如此的情况,我建议您创建一个示例项目来说明该问题并将其报告给
Android
团队。
我只使用 Android 支持库片段,因为在那里可以更快地修复错误。似乎只有在您使用框架片段时才会出现上述覆盖没有被正确调用的问题。
解决方法
我更新了我的应用程序以使用最新的支持库(版本 23.0.0),我发现他们弃用了 Fragment 类的 onAttach() 函数。
代替:
onAttach (Activity activity)
下雪了:
onAttach (Context context)
由于我的应用程序使用在弃用之前传递的活动,我认为一个可能的解决方案是:
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}
那是正确的方法吗?
更新:
如果我运行 API 低于 23 的设备,甚至不会调用新的 onAttach()。我希望这不是他们打算做的!
更新 2:
问题已通过 SDK 的最新更新解决。
我已经在我的 API 22 设备上进行了测试,并且正在调用 onAttach(Context)。
单击此处关注我几周前打开的错误报告以及
Google 人员的回答。