DialogFragment 报错汇总
来源:互联网 发布:centos 移除文件 编辑:程序博客网 时间:2024/05/16 18:47
最近在降低项目总体错误率,发现有一些dialogFragment报了几个active、already added的错误,就修复了一波.
Fragment already active
这是Fragment调用setArguments()方法时报的错误.原因是当Android堆栈正在删除Fragment而删除操作没有完成时,也就是Fragment仍保持active又被重新调用了setArguments()方法,常见操作是快速连续点击调用这个Fragment的操作.
解决方法:使用Fragment的isRemoving()方法来判断该Fragment是否还存在堆栈中,如果true,那么Fragment依然active,那么可以采取复写相同地址下的Arguments来解决;如果false,那么说明Fragment not active,可以直接调用setArguments()见下面代码.
if (fragment.isRemoving()) { fragment.getArguments().putAll(bundle);} else { fragment.setArguments(bundle);}
如果是全局的dialogfragment,可以通过判断dialogFragment是否为null来设置.
Fragment already added
出现场景:
Fragment:快速双击调用FragmentTransaction.add()方法添加fragment,而fragment不是每次单独生成的,就会引起这个异常。
DialogFragment:快速点击呼起dialogFragment的按钮,因为
DialogFragment.show()内部调用了FragmentTransaction.add()方法,所以调用DialogFragment.show()方法时候也可能会出现这个异常。
解决方法:
Fragment:在add()方法时候,先判断fragmentA.isAdded(),如下调用可以避免该异常:
if(!fragmentA.isAdded()){ FragmentManager manager =getFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.add(fragment, "tag"); ft.commit();}
DialogFragment:重写show方法,根据tag来获取fragment进行判断.
@Overridepublic void show(FragmentManager manager, String tag) { Fragment fragment = manager.findFragmentByTag(tag); if (fragment == null || !fragment.isAdded()) { super.show(manager, tag); }}
Fragment MyFragment not attached to Activity
出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等需要上下文Context的方法。
解决方法:
1.将调用的这些方法写在OnStart()中。
2.在调用:getResources().getString(R.xx.xxx); 之前增加一个判断isAdded();
不喜请轻喷,毕竟我是一个渣渣.
个人简书地址:http://www.jianshu.com/u/976bb1f8fc7b
- DialogFragment 报错汇总
- loadrunner报错汇总
- mysql报错汇总
- Xcode 报错汇总
- MySQL报错汇总
- android报错汇总
- iOS报错汇总
- C++ 报错汇总
- hibernate报错汇总
- 报错汇总
- spark报错汇总
- DialogFragment报错IllegalStateException:Can not perform this action after onSaveInstanceState
- DialogFragment 在调用dismiss之后再调用getdialog.show()报错
- [Java报错]常见报错汇总
- DialogFragment
- dialogFragment
- DialogFragment
- DialogFragment
- Linux网络编程
- spring整合mybatis的几种配置方式
- vue 的学习心得
- 关于Android 手机 开机速度的优化
- mbedTLS中验证服务器证书
- DialogFragment 报错汇总
- vue2 项目构建 (上)
- 指针练习-19
- WPF仪表盘控件
- 宣传部视频编辑组孙诗月 2017.12.04-2017.12.08
- SLA实践部分总结
- Hibernate中对象的三种状态及相互转化
- 哈罗单车异军突起遭马化腾吐槽真相,智能出行跨界布局给想象力插上翅膀
- spring中注解方式实现声明式事务管理