android fragement报nullexcption错误

来源:互联网 发布:windows db2 创建实例 编辑:程序博客网 时间:2024/06/07 22:25

       大笑,这题目起的够骚情了,原创傲慢的上校哦,转载请标明:http://blog.csdn.net/aomandeshangxiao/article/details/7753421

其实有些方法也是从网上找来的,拿来主义,共同分享下(Fragment其他资料:android之Fragment(官网资料翻译))。


第一个错误:FragmentManagerImpl.saveFragmentBasicState

下面是log:

        

[java] view plaincopy
  1. E/AndroidRuntime(29923): FATAL EXCEPTION: main  
  2. E/AndroidRuntime(29923): java.lang.NullPointerException  
  3. E/AndroidRuntime(29923):     at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1544)  
  4. E/AndroidRuntime(29923):     at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1574)  
  5. E/AndroidRuntime(29923):     at android.app.Activity.onSaveInstanceState(Activity.java:1213)  
  6. E/AndroidRuntime(29923):     at android.app.Activity.performSaveInstanceState(Activity.java:1162)  
  7. E/AndroidRuntime(29923):     at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1287)  
  8. E/AndroidRuntime(29923):     at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3208)  
  9. E/AndroidRuntime(29923):     at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3266)  
  10. E/AndroidRuntime(29923):     at android.app.ActivityThread.access$900(ActivityThread.java:139)  
  11. E/AndroidRuntime(29923):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279)  
  12. E/AndroidRuntime(29923):     at android.os.Handler.dispatchMessage(Handler.java:99)  
  13. E/AndroidRuntime(29923):     at android.os.Looper.loop(Looper.java:156)  
  14. E/AndroidRuntime(29923):     at android.app.ActivityThread.main(ActivityThread.java:5005)  
  15. E/AndroidRuntime(29923):     at java.lang.reflect.Method.invokeNative(Native Method)  
  16. E/AndroidRuntime(29923):     at java.lang.reflect.Method.invoke(Method.java:511)  
  17. E/AndroidRuntime(29923):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)  
  18. E/AndroidRuntime(29923):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)  
  19. E/AndroidRuntime(29923):     at dalvik.system.NativeStart.main(Native Method)  

看老半天log,没有琢磨明白,在网上找了下,说出现这个问题,主要是以下两个因素:

       一是用了android.support.v4包,

       二是FragmentActivity.

       本人正是在从Fragment跳转到另一个Activity时候报的错,据说是个官方Bug,已经有程序员把这个问题提交到官方了https://android-review.googlesource.com/#/c/31261/

下面看看他们提交的内容:

        

<span style="color: rgb(255, 0, 0);">If a fragment's saved view state is null and the user visible hint is true then the `result` bundle will havenever been initialized to a value resulting in a `NullPointerException`.</span>


        如果一个Fragment保存的视图状态为Null并且用户可见提示为true,那么'result' bundle(要保存的Bundle)会有一个微博初始化的值,然后导致空指针异常。

        如何解决此问题呢?问题出在Save上,在有Fragment的Activity中重写onSaveInstanceState()方法,并且注释掉super.onSaveInstanceState(),这样就不会调用父类的onSaveInstanceState(outState)方法了,就不会报异常了。

[java] view plaincopy
  1. outState 对象为空..在onSaveInstanceState()函数中不使用到outState即可.  
  2.   
  3. [java] view plaincopy  
  4. @Override    
  5.     protected void onSaveInstanceState(Bundle outState) {    
  6.         // TODO Auto-generated method stub     
  7.         //super.onSaveInstanceState(outState);    
  8.             
  9.     }    

第二个、使用ListFragment:java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class

            在ListFragment中,想当然的以为,像其他Fragment一样:

[java] view plaincopy
  1. public class ListFragmentTest extends ListFragment {  
  2.   
  3.     @Override  
  4.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  5.             Bundle savedInstanceState) {  
  6.         View root = inflater.inflate(R.layout.list, null);  
  7.         return root;  
  8.     }  

在list.xml里面

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.       
  7.     <TextView   
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/app_name"  
  11.         />  
  12.     <ListView   
  13.         android:id="@+id/list"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="fill_parent"  
  16.         ></ListView>  
  17. </LinearLayout>  

看下log:

[java] view plaincopy
  1. 07-16 15:43:22.026: E/AndroidRuntime(605): FATAL EXCEPTION: main  
  2. 07-16 15:43:22.026: E/AndroidRuntime(605): java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.demo/cn.demo.FragmentTestActivity}: android.view.InflateException: Binary XML file line #23: Error inflating class fragment  
  3. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)  
  4. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)  
  5. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread.access$600(ActivityThread.java:123)  
  6. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)  
  7. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.os.Handler.dispatchMessage(Handler.java:99)  
  8. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.os.Looper.loop(Looper.java:137)  
  9. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread.main(ActivityThread.java:4424)  
  10. 07-16 15:43:22.026: E/AndroidRuntime(605):  at java.lang.reflect.Method.invokeNative(Native Method)  
  11. 07-16 15:43:22.026: E/AndroidRuntime(605):  at java.lang.reflect.Method.invoke(Method.java:511)  
  12. 07-16 15:43:22.026: E/AndroidRuntime(605):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)  
  13. 07-16 15:43:22.026: E/AndroidRuntime(605):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)  
  14. 07-16 15:43:22.026: E/AndroidRuntime(605):  at dalvik.system.NativeStart.main(Native Method)  
  15. 07-16 15:43:22.026: E/AndroidRuntime(605): Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class fragment  
  16. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)  
  17. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)  
  18. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)  
  19. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)  
  20. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)  
  21. 07-16 15:43:22.026: E/AndroidRuntime(605):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)  
  22. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.Activity.setContentView(Activity.java:1835)  
  23. 07-16 15:43:22.026: E/AndroidRuntime(605):  at cn.demo.FragmentTestActivity.onCreate(FragmentTestActivity.java:11)  
  24. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.Activity.performCreate(Activity.java:4465)  
  25. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)  
  26. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)  
  27. 07-16 15:43:22.026: E/AndroidRuntime(605):  ... 11 more  
  28. 07-16 15:43:22.026: E/AndroidRuntime(605): Caused by: java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class  
  29. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ListFragment.ensureList(ListFragment.java:402)  
  30. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.ListFragment.onViewCreated(ListFragment.java:203)  
  31. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:811)  
  32. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1010)  
  33. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1108)  
  34. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.app.Activity.onCreateView(Activity.java:4243)  
  35. 07-16 15:43:22.026: E/AndroidRuntime(605):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)  
  36. 07-16 15:43:22.026: E/AndroidRuntime(605):  ... 21 more  

        为什么呢?因为ListFragment里面已经提供了系统自带的ListView,这样写,当然出错。可以直接不重写OnCreatView方法,使用getListView()获取系统提供的ListView,但是获取的ListView设置Item间隔线只能getListView().setDivider(divider),其参数为Drawable类型。当然如果只想简单的设置下Divider的颜色呢?

        其实ListFragment当然运行自定义布局,但是Listview要用系统的:

[java] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.       
  7.     <TextView   
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/app_name"  
  11.         />  
  12.     <ListView   
  13.         android:id="@id/android:list"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="fill_parent"  
  16.         ></ListView>  
  17. </LinearLayout>  

在这里,就可以方便的设置listview的各个参数了。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 骨头卡在喉咙里怎么办 卡刺喉咙怎么办小窍门 中百购物卡过期怎么办 得仕卡过期了怎么办 超市购物卡丢了怎么办 中石化油卡丢失怎么办 etc同车换车牌了怎么办 石油加油卡丢了怎么办 石化加油卡丢了怎么办 怎么办中石化的加油卡 中石油油卡丢失怎么办 公司加油卡丢了怎么办 yy频道被回收了怎么办 油卡里的圈存怎么办 农商银行圈存怎么办 社保卡号忘记了怎么办 陕西壳牌加油卡怎么办 联通用超了流量怎么办 联通3g上不了网怎么办 车玻璃水冻住了怎么办 车里玻璃水冻了怎么办 做现货亏了60万怎么办 宿舍太吵晚上睡不着觉怎么办 脚扎了钉子肿了怎么办 龙血树叶子下垂怎么办 龙血树叶子卷曲怎么办 3岁宝宝长期便秘怎么办 4岁小儿便秘严重怎么办 3岁宝宝便秘严重怎么办 3岁宝宝一直便秘怎么办 11个月宝宝便秘怎么办 2个月的宝宝便秘怎么办 宝宝便秘拉不下来怎么办 5一6岁儿童便秘怎么办 3个月宝宝便秘怎么办 8个月宝宝便秘怎么办 孕5个月咳嗽厉害怎么办 孕8个月咳嗽厉害怎么办 拆石膏后关节僵硬怎么办 宝宝的小腿不直怎么办 鸡咳嗽有痰呼噜怎么办