在使用fragment的时候经常会遇到getActivity()为null的情况.比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题.之前解决这个问题,通常都是直接加空指针判断来规避,但是这并没有真正解决问题. 很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象.如果系统内存不足.切换横竖屏.app长时间在后台运行,Activity都可能会被系统回收然后重建,但Fragment并…
看友盟的错误日志发现又出现了NullPointerException,然后去看代码,发现只有是上下文有空的可能,但是因为以前已经发生过这种情况所以上下文我都是在创建Fragment对象的时候从Activity里面传过来的,而且我测试了多次,没有问题,然后在网上找资料发现很多getActivity()为空的情况,发现我忽略了一个问题就是:如果app长时间在后台运行,再次进入app的时候可能会出现crash,Activity可能被系统回收然后重建,但是Fragment不会随着Activity的回收而…
问题: 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况 思考 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的 源码 fragment 的生命周期 以下源码基于 API 26 getActivity 可能为 Null, 跟进源码,可…
重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到SurfaceView进行预览,那么问题来了,当切换到对应的Fragment时,屏幕会黑一下,黑了1秒左右就显示出正常的界面,而且这种现象只有第一次进入该 Fragment才会出现,之后进入都不会出现,解决方法是无意在github上看到了,试了一下,可以行的通,下面贴出解决方法. 方法一.在Activity的…
本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 引用so  在app/src/main目录下新建Directory,命名文件夹为jniLIB(文件名不能错),把so文件放进去 ,如图: 二 编写java代码调用so中方法 ①在代码中引用so 创建myJNI.java文件,用System.loadLibrary加载so,同时声明so中的HelloW…
大家都知道对于Activity和Fragment都可以注册OnActivityResult()方法,但是要注意几点: a.当activity和fragment都注册了OnActivityResult()方法的时候,最好能统一,即只在一个地方注册该方法,不要都注册,这回造成混乱,而且我尝试当2个地方都注册了OnActivityResult()这个方法的时候,activity的该方法会覆盖fragment的方法,也就是说在fragment不会走OnActivityResult()方法,而是直接去了a…
返回错误的requestCode返回值为65537,在Fragment里调用startActivityForResult,就必须在Fragment里处理onActivityResult.…
要在activity里面去接受,然后传递给fragment对象,fragment有很多回调调用不到 你的设备有摄像头吗? 为了确保市场上的大多数设备都能运行你的程序,必须在项目中做一些检测,保证使用的设备可以执行你的代码. 我们可以这么做: 在程序的配置清单文件中标明要求使用摄像头: 在代码中用PackageManager进行设备功能检测: 在项目的androidManifest文件中添加使用摄像头权限 android.hardware.camera (在一个Fragment中)用Package…
在Activity中可以直接使用 setSupportActionBar(toolbar); 就可以重写 onCreateOptionsMenu 和 onOptionsItemSelected 方法: 但是在Fragment中则需要 ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar); Fragment中需要将 getActivity()转为AppCompatActivity才能获取setSupportActionBa…
[o] Activity中调用SharedPreferences的方式: String prefsName = "mysetting"; SharedPreferences prefs = getSharedPreferences(prefsName, Context.MODE_PRIVATE); boolean a1 = prefs.getBoolean("a1_key", false); boolean a2 = prefs.getBoolean("a…