解决fragment嵌套多次选择图片或者拍照,临时文件为空的问题

我用fragment里面嵌套TabLayout+Viewpager+(多个)fragment,内部的fragment里面有一个列表,列表中有一个选择图片的操作;遇到第一个坑就是在内部fragment中调用startActivityForResult没有回调;具体解决方法入下:

android多层Fragment嵌套,内部Fragment接收不到OnActivityResult()方法的回调的解决方案

接下来要解决的是在上面问题的基础上又发酵的一个问题;我在打开相机或者打开相册的时候先创建了一个目标输出的File(size=0),然后将该file对应的Uri传到相机或者相册的指定界面去将对应的流写入该文件,这一步操作完图片已经存在了指定的文件目录(手动查看文件管理器);然后再调用剪裁功能,然后压缩缩略图进行上传,这第一个流程没问题;但是,当你觉得刚才的图片不是你想要的,想重新换一张图片的时候,将原来的删除,再打开相机或者图库没问题,选择剪裁问题就来了,在上面创建的File在这里为null,通过FileProvider.getUriForFile或者Uri.fromFile(file)获取Uri的时候报空指针异常,通过跟源码,发现是以前创建的file为空,好神奇,同一个类里面,在一个流程没有结束的时候成员变量自动置空了;后来我想应该和fragment重新加载有关,但是处理生命周期比较麻烦;索性将文件前面加个static;来个静态变量,省的来回创建;结果问题解决了。

 private static File mTempFile;

一个static简单粗暴,我这里图片选择是用RecyclerView单独封装的,我想也与RecyclerView的onSaveInstanceState和onRestoreInstanceState有关,有兴趣的自己可以探究。我觉得还是static比较简单粗暴,黑猫白猫,抓住老鼠就是好猫

发布了117 篇原创文章 · 获赞 56 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/Jiang_Rong_Tao/article/details/91809648