开发异常问题总结一

来源:互联网 发布:淘宝图片搬家怎么用 编辑:程序博客网 时间:2024/04/29 06:19
一:java.lang.RuntimeException: Unable to start activity ComponentInfo: android.view.InflateException: Binary XML file line #14: Error inflating class fragment
出现场景:在项目中,首先加载WelcomeActivity界面,随后加载HomeActivity界面,在activity界面中加载fragment,fragment中又添加了多个fragment,当加载homeActivity主界面后,点击Home键,长时间后activity被系统回收,再次点击时会报此异常,应用崩溃
解决办法:由于时间过久或者开启应用过多,内存不足,系统开始回收应用Activity,这时候重新打开应用,会重新调用加载oncreate,fragment事务会被重新提交,fragemnt反复加载,所以报错;
@Overridepublic void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState);}
在此方法中保存退出时的状态信息,在oncreate中                                                                                   if (savedInstanceState == null) {initView();}
判断存储数值是否为空,防止反复加载提交事务
二:Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class fragment
出现场景:xml布局文件出错,xml的标签和属性的命名、定义错误,控件Button被写成了ImageView
解决办法:找到错误的布局控件声明代码,保持与xml中一致
三:Your project contains error(s),please fix them before running your application 
出现场景:项目运行时报错
解决办法:右键项目工程,打开Build Path,选择Configure build path,在Order andExport中取消Android Private Libraries选项,重新运行项目
四:java.lang.IllegalStateException: Fragment already added异常的处理。
出现场景:由一个activity中的fragment向另一个fragment中传值时出现
解决办法:

在 Fragment 没有被添加到 FragmentManager 之前,我们可以通过 Fragment.setArguments() 来设置参数,并在 Fragment 中,使用 getArguments() 来取得参数。在 Fragment 被添加到 FragmentManager 后,一旦被使用,我们再次调用 setArguments() 将会导致 java.lang.IllegalStateException: Fragment already active 异常。

解决方法:可以使用setter和getter方法进行数据的存储和获取。

参考:http://stackoverflow.com/questions/10364478/got-exception-fragment-already-active/15084683

(以上是问题的原因)

问题的解决方法参考

http://blog.csdn.net/u012702547/article/details/49786417
三种方式传值

1.直接在一个Fragment中调用另外一个Fragment中的方法

  1. ContentFragment cf = (ContentFragment) getActivity()  
  2.                             .getFragmentManager().findFragmentById(  
  3.                                     R.id.content_fg);  
  4.                     cf.showPro(name); 
但是要保证我们调用的方法是public公开的showPro(String);

2.使用接口回调的方法

3.使用广播

0 0