,这题目起的够骚情了,原创傲慢的上校哦,转载请标明: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. [java] view plaincopy
  3. @Override
  4. protected void onSaveInstanceState(Bundle outState) {
  5. // TODO Auto-generated method stub
  6. //super.onSaveInstanceState(outState);
  7. }

第二个、使用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. @Override
  3. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  4. Bundle savedInstanceState) {
  5. View root = inflater.inflate(R.layout.list, null);
  6. return root;
  7. }

在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. <TextView
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="@string/app_name"
  10. />
  11. <ListView
  12. android:id="@+id/list"
  13. android:layout_width="fill_parent"
  14. android:layout_height="fill_parent"
  15. ></ListView>
  16. </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. <TextView
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="@string/app_name"
  10. />
  11. <ListView
  12. android:id="@id/android:list"
  13. android:layout_width="fill_parent"
  14. android:layout_height="fill_parent"
  15. ></ListView>
  16. </LinearLayout>

在这里,就可以方便的设置listview的各个参数了。

android fragement报nullexcption错误的更多相关文章

  1. android studio报butterknife错误

    Error:Execution failed for task ':shipper:javaPreCompileDebug'.> Annotation processors must be ex ...

  2. 导入android项目在eclipse中会报@Override错误

    很多时候导入android项目在eclipse中会报@Override错误,这是由于java编译器的版本不正确,Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明:但1. ...

  3. Android studio2.2 ndk 错误 :format not a string literal and no format arguments!

    在Android Studio2.2 进行NDK编程,在对*char 字符串 进行日志输出时,报错: error: format not a string literal and no format  ...

  4. Android开发各类常见错误解决方案

    本文属于个人平时项目开发过程遇到的一些问题,记录下来并总结解决方案,希望能帮到大家解决问题,有些问题的解决方案是在StackoverFlow上找到的,建议大家遇到问题多去上面找,基本上都能找到解决方案 ...

  5. android排除报很多错方法 Execution failed for task ':app:compileDebugJavaWithJavac' in Android Studio

    android排除报很多错方法1.回撤对应layout的xml改动2.回撤对应java的改动3.重命名文件后导致的资源不对应 Execution failed for task ':app:compi ...

  6. android studio 更新 Gradle错误解决方法(Gradle sync failed)

    android studio 更新 Gradle错误解决方法   Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...

  7. Android NDK开发常见错误

    错误一: make: *** No rule to make target `/cygdrive/d/1-workspace/showmap-android-opengles/jni/showmap_ ...

  8. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  9. Eclipse开发Android项目报错解决方案详细教程,最新版一篇就够了!

    本文记录刚接触Android开发搭建环境后新建工程各种可能的报错,并亲身经历漫长的解决过程(╥╯^╰╥),寻找各种偏方,避免大家采坑,希望能帮助到大家. 报错信息 出错一:The import and ...

随机推荐

  1. jQuery简介和基础

    一.函数变量的作用域 1.变量的作用域实在声明时决定的而不是调用执行时决定 <script> var a=6,b=7; function t() { // var a=3,b=5; con ...

  2. My Stuck in C++

    My Stuck in C++ Zhong-Liang Xiang Oct. 1st, 2017 这个专题记录了对于我而言, c++迷一样的东西.

  3. API说明书规范

    目录 1       前言 1.1         编写目的 1.2        预期读者 1.3         关于API设计开发 2       API公共说明 3       文档API索引 ...

  4. JAVA局部内部类

    在刚刚学到的android开发中了解到Button的onClick是通过局部内部类的方式实现的,具体的原理我以后再去了解,只是遇到问题总是想知道为什么,不要告诉我这是规则,死记住就可以了. 问题是局部 ...

  5. PHP 5 Math 函数

    PHP Math 简介 Math 函数能处理 integer 和 float 范围内的值. 安装 PHP Math 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP 5 Math 函 ...

  6. 介绍Docker容器

    容器是 Docker 又一核心概念. 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用 ...

  7. Bootstrap3 栅格系统-嵌套列

    为了使用内置的栅格系统将内容再次嵌套,可以通过添加一个新的 .row 元素和一系列 .col-sm-* 元素到已经存在的 .col-sm-* 元素内.被嵌套的行(row)所包含的列(column)的个 ...

  8. SLAMCN资料收藏转载

    网页链接地址:http://www.slamcn.org/index.php/%E9%A6%96%E9%A1%B5 资料非常丰富,内容如下: 首页 目录 [隐藏]  1 SLAM 介绍 1.1 什么是 ...

  9. Android必知必会-发布开源 Android 项目注意事项

    如果移动端访问不佳,请使用 –> Github版 1. 合理配置 .gitignore 文件 配置 .gitignore 可以排除一些非必要文件和保护保密信息,下面是在项目根目录下 .gitig ...

  10. RxJava(七) 使用debounce操作符 优化app搜索功能

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51555203 本文出自:[余志强的博客] 一.抛出问题 现在几乎所有 ...