Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法
问题:
- 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒
- 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况
思考
- 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的
源码
fragment 的生命周期
以下源码基于 API 26
- getActivity 可能为 Null, 跟进源码,可以看到 getActivity() 是通过 mHost 成员变量获取 activity ,假如 mHost 为 null , 就返回一个 Null 。
final public Activity getActivity() {
return mHost == null ? null : mHost.getActivity();
}
- 那成员变量 mHost 是什么呢?什么时候赋值的?
- mHost: 抽象类 android.app.FragmentHostCallback,继承之: android.app.FragmentContainer
- mHost 传入,是在 Activity 初始化的时候传入的,源码如下:
- 当调用 getActivity() 的时候,Fragment 已经 onDetach() 从 Activity 中。所以会造成空指针。
解决办法
- 在 BaseFragment 的 onAttach() 方法中获取 Activity 并赋值给成员变量,然后在需要使用 getActivity() 的地方使用该成员变量就可以了。
参考
https://blog.csdn.net/zqx198810/article/details/24203989?utm_source=tuicool&utm_medium=referral
https://blog.csdn.net/u010897392/article/details/17073605
Fragment 源码启动:https://www.jianshu.com/p/f2fcc670afd6
getActivity() 空指针部分:https://www.jianshu.com/p/d9143a92ad94
Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法的更多相关文章
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- Android 在Fragment中修改Activity中的控件
在当前的Fragment中调用getActivity方法获取依附着的那个Activity,然后再用获取到的Activity去findViewById拿到你需要的控件对其操作就行了.
- [转]iOS Safari 中click点击事件失效的解决办法
iOS Safari 中click点击事件失效的解决办法 问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素 ...
- python matplotlib plot 数据中的中文无法正常显示的解决办法
转发自:http://blog.csdn.net/laoyaotask/article/details/22117745?utm_source=tuicool python matplotlib pl ...
- eclipse中的js文件报错的解决办法
在使用别人的项目的时候,导入到eclipse中发现js文件报错,解决办法是关闭eclipse的js校验功能. 三个步骤: 1. 右键点击项目->properties->Validation ...
- 配置IIS提示打开目录浏览时的问题:未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法
错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的 ...
- Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)
当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...
- linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法
linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details/38274475 dos2unix ...
- Xamarin中VS无法连接Mac系统的解决办法
Xamarin中VS无法连接Mac系统的解决办法 按照以下步骤排查:(1)确认Mac系统中安装Xamarin.iOS开发必备的组件,如Mono.Xamarin.iOS.(2)将Windows和Mac下 ...
随机推荐
- Python open详解
一.打开文件的模式有: 1.r,只读模式[默认]. 2.w,只写模式.[不可读,不存在则创建,存在则删除内容] 3.a,追加模式.[可读,不存在则创建,存在则只追加内容] 二.+ 表示可以同时读写某个 ...
- Volley网络通信框架
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- POJ 3273-Monthly Expense 求分组和的最小的最大值【二分答案】
题目链接:http://poj.org/problem?id=3273 题目大意:给出一个有n个数据的数组,将其分为连续的m份,找到一种分法,是的m份中最大一份总和最小 解题思路: 直接在答案的区间内 ...
- Linux系统之常用文件搜索命令
(一)常用文件搜索命令 (1)which命令 (2)find命令 (3)locate (4)updatedb (5)grep (6)man (7)whatis (一)常用文件搜索命令 (1)which ...
- Chameleon
# -*- coding: utf-8 -*- """ Created on Tue Dec 18 09:55:16 2018 @author: Mark,LI &quo ...
- luogu P4688 [Ynoi2016]掉进兔子洞 bitset 莫队
题目链接 luogu P4688 [Ynoi2016]掉进兔子洞 题解 莫队维护bitset区间交个数 代码 // luogu-judger-enable-o2 #include<cmath&g ...
- hihoCoder.1513.小Hi的烦恼(bitset 五维偏序)
题目链接 五维偏序,对每一维维护bitset,表示哪儿为1(比它大),然后5个bitset与起来就能得到答案了. 具体实现可以用5*n个bitset,按排名搞个前缀和. 复杂度\(O(n^2/w)\) ...
- Python3练习题系列(06)——各种符号总结
Python3中的各种符号总结 1关键字 import keyword print(keyword.kwlist, end='\t') ['False', 'None', 'True', 'and', ...
- 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce(转)
零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce:http://www.aboutyun.com/thread-7567-1-1.html mapreduce学习目录总结 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4