背景

现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现。

回调接口一般都写在Fragment的onAttach()方法中,Fragment 3.0 的onAttach()方法有2个重载,其中一个被废弃,所以通常是:

XX_Fragment extends Fragment(Fragment 3.0)

@Overridepublic void onAttach(Context context) {if (context instanceof OnCoverChangeListener) {mListener = (ABC_Listener) context;} else {throw new RuntimeException(context.toString()+ " must implement ABC_Listener");}super.onAttach(context);}

但是在一些特定的Android版本下,这个onAttach(Context context)并未被调用,而是调用了废弃的onAttach(Activity activity)方法。

解决方案

如果使用了Fragment 3.0,并且用到了自定义回调,那么为了兼容,需要:

@Overridepublic void onAttach(Context context) {if (context instanceof OnCoverChangeListener) {mListener = (ABC_Listener) context;} else {throw new RuntimeException(context.toString()+ " must implement ABC_Listener");}super.onAttach(context);}//SDK API<23时,onAttach(Context)不执行,需要使用onAttach(Activity)。Fragment自身的Bug,v4的没有此问题@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {if (activity instanceof OnCoverChangeListener) {mListener = (ABC_Listener) activity;} else {throw new RuntimeException(activity.toString()+ " must implement ABC_Listener");}}}

总结

建议使用FragmentV4版的,减少不必要的系统自身Bug的处理。

还有一篇关于FragmentV4、Fragment3.0的onBackPressed();的Bug详解:
传送门:Android项目开发填坑记-Fragmen的onBackPressed

PS:

你可以关注的我Github、CSDN和微博

转载于:https://www.cnblogs.com/wuyida/p/6300471.html

Android项目开发填坑记-Fragment的onAttach相关推荐

  1. Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制

    如果移动端访问不佳,请访问 –> Github版 背景 Android 的 classLoader 在加载 APK 的时候限制了class.dex 包含的 Java 方法数,其总数不能超过655 ...

  2. Android 项目开发填坑记 - 谷歌商店上架被拒 Apps On Device

    关键词:谷歌商店被拒.数据安全表单.已安装应用.Policy Declaration.Data Safety Section.App Activity Data Type.Apps On Device ...

  3. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  4. 支付开发填坑记之支付宝

    支付宝在所有支付方式中最好开发的了,因为文档比较清晰,而且开发起来也比较简单.因此,支付宝的坑是相对较少的. 原文地址 APP支付 APP支付步骤为: 获取支付宝的配置信息. 生成商家订单信息. 根据 ...

  5. php项目简介,一、项目简介 · ThinkPHP5项目开发“填坑”实录 · 看云

    ###项目简介 [TOC=4,6] 所有的关于技术细节的讨论和实现都是基于一定的项目背景的,所以首先来介绍下我做的项目情况.这里要介绍的项目是一个**作业管理系统**.对你没看错,就是一个简单的学生交 ...

  6. 小程序项目之填坑小记

    作者:首席填坑官∙苏南 公众号:honeyBadger8,本文原创,著作权归作者所有,转载请注明原链接及出处. 简诉 是的,真的,你没有看错,我就是上次那个加薪的,但是现在问题来了,最近又搞了个小程序 ...

  7. 为微信开发填坑:微信网页支付的开发流程及填坑技巧 1

    GitChat 作者:极笔北客 原文:为微信开发填坑:微信网页支付的开发流程及填坑技巧 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 [不要错过文末彩蛋] 小程序作为微信之父张小龙钦 ...

  8. 为微信开发填坑:微信网页支付的开发流程及填坑技巧

    GitChat 作者:极笔北客 原文:为微信开发填坑:微信网页支付的开发流程及填坑技巧 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 [不要错过文末彩蛋] 小程序作为微信之父张小龙钦 ...

  9. Android项目开发—GeoQuiz

    Android项目开发-GeoQuiz 应用规划 确定功能 必须的界面及界面跳转的流程 ... 界面设计 主界面确定 模块界面.列表.查看.编辑界面 添加需要的组件 ... 数据操作和存储 业务实现 ...

最新文章

  1. python隐藏部分代码_python隐藏类中属性的3种实现方法
  2. 神武服务器维护打副本,6月9日神武2维护解读:120级副本奖励次数提升
  3. 使用ADO操作数据库时一个好用的VARIANT类!
  4. 天源迪科和科大讯飞的关系_科大讯飞 语音突围
  5. JQ基础练习---图片划过变暗
  6. oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法
  7. Android的ListFragment和Fragment的使用
  8. mysql 报错注入输出多个字段_SQL注入浅析
  9. 北京集训②DAY1 Morning
  10. 平民版均线量化交易模型
  11. 云计算开发一般负责什么工作呢?云计算是做什么的?
  12. java ppt转图片,怎么用POI将PPT的内容转换为图片
  13. sqrt函数java_Java BigDecimal sqrt()用法及代码示例
  14. C++ 高仿easyX图形库
  15. 上传身份证照片js_web端上传图片,截取证件照
  16. 线上连锁线下整合 连锁店电商解决方案
  17. 2022前端秋招面试题总结 阿里 腾讯 字节 百度 网易 京东 小红书 快手面试记录
  18. Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案
  19. 风速的java_UV数据与风速风向数据转换
  20. java里如何求当前年月日_Java获取当前时间年月日的方法

热门文章

  1. 发送结构化数据Client端
  2. python的类是什么意思_Python 各种下划线都是啥意思_、_xx、xx_、__xx、__xx__、_classname_...
  3. java 工程新建ivy文件_Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境
  4. java json 易用_Java中 Json的使用
  5. 微型计算机使用的普通编码是,2017计算机一级考试选择题练习及答案(2)
  6. 田忌赛马c语言程序设计,还是杭电1052田忌赛马
  7. php如何解决脏读,php 技术沉淀
  8. 交换机的特点及工作原理
  9. 【渝粤教育】国家开放大学2018年秋季 0107-21T现代货币金融学 参考试题
  10. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(5)