解决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比较简单粗暴,黑猫白猫,抓住老鼠就是好猫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值