作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我更新了我的应用程序以使用最新的支持库(版本 23.0.0),我发现他们弃用了 Fragment 类的 onAttach() 函数。
代替:
onAttach (Activity activity)
现在是:
onAttach (Context context)
由于我的应用程序使用在弃用之前传递的 Activity ,我认为一个可能的解决方案是:
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}
这是正确的做法吗?
更新:
如果我运行 API 低于 23 的设备,甚至不会调用新的 onAttach()。我希望这不是他们打算做的!
更新 2:
问题已通过 SDK 的最新更新解决。
我已经在我的 API 22 设备上进行了测试,并且正在调用 onAttach(Context)。
点击here关注我几周前打开的错误报告以及 Google 员工的回答。
最佳答案
Activity 是一个上下文,所以如果您可以简单地检查上下文是一个 Activity 并在必要时进行转换。
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
}
}
更新:有些人声称从未调用过新的 Context
覆盖。我已经做了一些测试,但找不到这样的场景,根据源代码,它永远不应该是真的。在我测试的所有情况下,无论是 SDK23 之前还是之后,Activity
和 onAttach
的 Context
版本都被调用。如果您能找到一种情况并非如此,我建议您创建一个示例项目来说明问题和 report it to the Android team .
更新 2:我只使用 Android 支持库 fragment ,因为那里的错误得到更快地修复。似乎只有在您使用框架 fragment 时才会出现上述覆盖未正确调用的问题。
关于Android Fragment onAttach() 已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083053/
我是一名优秀的程序员,十分优秀!