android fragement报nullexcption错误

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:13.63636302948px; line-height:26px">        <img alt="大笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif" st

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

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


第一个错误:FragmentManagerImpl.saveFragmentBasicState

下面是log:

        

[java]  view plain copy
  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 have
never 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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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的各个参数了。
目录
相关文章
|
Android开发
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
1994 0
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
|
Android开发
【错误记录】Android 应用打包错误 ( Entry name ‘assets/xxx.xml‘ collided )
【错误记录】Android 应用打包错误 ( Entry name ‘assets/xxx.xml‘ collided )
1090 0
【错误记录】Android 应用打包错误 ( Entry name ‘assets/xxx.xml‘ collided )
|
Android开发
【已解决】Android Studio下,gradle project sync failed 错误
原文:【已解决】Android Studio下,gradle project sync failed 错误 Android studio下突然报错 gradle project sync failed.
6986 0
|
Java Android开发
关于Java/Android开发中常见异常错误汇总___知识导图分享
注: 1.若博客图片不清晰,可以鼠标点击图片查看,或者下载到电脑中查看,也可以留言给我,发你高清原图。希望对热爱学习的朋友有帮助! 2.这是汇总的关于Java/Android开发中常见的异常、错误,绘制导图如下:
159 0
关于Java/Android开发中常见异常错误汇总___知识导图分享
|
Java Android开发 Kotlin
【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
470 0
【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
|
Android开发
【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
235 0
【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
|
存储 Android开发
【错误记录】Android 文件分享 FileProvider 设置错误
【错误记录】Android 文件分享 FileProvider 设置错误
225 0
【错误记录】Android 文件分享 FileProvider 设置错误
|
Android开发
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
658 0
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
|
存储 Android开发
【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )
【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )
361 0
【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )
|
Java 开发工具 Android开发
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )
435 0
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )

热门文章

最新文章

  • 1
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    Android历史版本与APK文件结构
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 1
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    22
  • 2
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    39
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    113
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    39
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54
  • 6
    Android历史版本与APK文件结构
    147
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    46
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    39
  • 9
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    66
  • 10
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    47