android fragement报nullexcption错误
,这题目起的够骚情了,原创傲慢的上校哦,转载请标明:http://blog.csdn.net/aomandeshangxiao/article/details/7753421
其实有些方法也是从网上找来的,拿来主义,共同分享下(Fragment其他资料:android之Fragment(官网资料翻译))。
第一个错误:FragmentManagerImpl.saveFragmentBasicState
下面是log:
- E/AndroidRuntime(29923): FATAL EXCEPTION: main
- E/AndroidRuntime(29923): java.lang.NullPointerException
- E/AndroidRuntime(29923): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1544)
- E/AndroidRuntime(29923): at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1574)
- E/AndroidRuntime(29923): at android.app.Activity.onSaveInstanceState(Activity.java:1213)
- E/AndroidRuntime(29923): at android.app.Activity.performSaveInstanceState(Activity.java:1162)
- E/AndroidRuntime(29923): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1287)
- E/AndroidRuntime(29923): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3208)
- E/AndroidRuntime(29923): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3266)
- E/AndroidRuntime(29923): at android.app.ActivityThread.access$900(ActivityThread.java:139)
- E/AndroidRuntime(29923): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279)
- E/AndroidRuntime(29923): at android.os.Handler.dispatchMessage(Handler.java:99)
- E/AndroidRuntime(29923): at android.os.Looper.loop(Looper.java:156)
- E/AndroidRuntime(29923): at android.app.ActivityThread.main(ActivityThread.java:5005)
- E/AndroidRuntime(29923): at java.lang.reflect.Method.invokeNative(Native Method)
- E/AndroidRuntime(29923): at java.lang.reflect.Method.invoke(Method.java:511)
- E/AndroidRuntime(29923): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
- E/AndroidRuntime(29923): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
- 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)方法了,就不会报异常了。
- outState 对象为空..在onSaveInstanceState()函数中不使用到outState即可.
- [java] view plaincopy
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- // TODO Auto-generated method stub
- //super.onSaveInstanceState(outState);
- }
第二个、使用ListFragment:java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class
在ListFragment中,想当然的以为,像其他Fragment一样:
- public class ListFragmentTest extends ListFragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View root = inflater.inflate(R.layout.list, null);
- return root;
- }
在list.xml里面:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/app_name"
- />
- <ListView
- android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- ></ListView>
- </LinearLayout>
看下log:
- 07-16 15:43:22.026: E/AndroidRuntime(605): FATAL EXCEPTION: main
- 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
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread.access$600(ActivityThread.java:123)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.os.Handler.dispatchMessage(Handler.java:99)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.os.Looper.loop(Looper.java:137)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread.main(ActivityThread.java:4424)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at java.lang.reflect.Method.invokeNative(Native Method)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at java.lang.reflect.Method.invoke(Method.java:511)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at dalvik.system.NativeStart.main(Native Method)
- 07-16 15:43:22.026: E/AndroidRuntime(605): Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class fragment
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.Activity.setContentView(Activity.java:1835)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at cn.demo.FragmentTestActivity.onCreate(FragmentTestActivity.java:11)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.Activity.performCreate(Activity.java:4465)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
- 07-16 15:43:22.026: E/AndroidRuntime(605): ... 11 more
- 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
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ListFragment.ensureList(ListFragment.java:402)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.ListFragment.onViewCreated(ListFragment.java:203)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:811)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1010)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1108)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.app.Activity.onCreateView(Activity.java:4243)
- 07-16 15:43:22.026: E/AndroidRuntime(605): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
- 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要用系统的:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/app_name"
- />
- <ListView
- android:id="@id/android:list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- ></ListView>
- </LinearLayout>
在这里,就可以方便的设置listview的各个参数了。
android fragement报nullexcption错误的更多相关文章
- android studio报butterknife错误
Error:Execution failed for task ':shipper:javaPreCompileDebug'.> Annotation processors must be ex ...
- 导入android项目在eclipse中会报@Override错误
很多时候导入android项目在eclipse中会报@Override错误,这是由于java编译器的版本不正确,Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明:但1. ...
- 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 ...
- Android开发各类常见错误解决方案
本文属于个人平时项目开发过程遇到的一些问题,记录下来并总结解决方案,希望能帮到大家解决问题,有些问题的解决方案是在StackoverFlow上找到的,建议大家遇到问题多去上面找,基本上都能找到解决方案 ...
- android排除报很多错方法 Execution failed for task ':app:compileDebugJavaWithJavac' in Android Studio
android排除报很多错方法1.回撤对应layout的xml改动2.回撤对应java的改动3.重命名文件后导致的资源不对应 Execution failed for task ':app:compi ...
- android studio 更新 Gradle错误解决方法(Gradle sync failed)
android studio 更新 Gradle错误解决方法 Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...
- Android NDK开发常见错误
错误一: make: *** No rule to make target `/cygdrive/d/1-workspace/showmap-android-opengles/jni/showmap_ ...
- (转载)android开发常见编程错误总结
首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07 第771次阅读 android,异常 0 编辑推荐:稀 ...
- Eclipse开发Android项目报错解决方案详细教程,最新版一篇就够了!
本文记录刚接触Android开发搭建环境后新建工程各种可能的报错,并亲身经历漫长的解决过程(╥╯^╰╥),寻找各种偏方,避免大家采坑,希望能帮助到大家. 报错信息 出错一:The import and ...
随机推荐
- RabbitMQ-Spring AMQP
上篇文章RabbitMQ基础入门学习了rabbitMQ一些基础的api,当然spring也在原生代码的基础上做了更多的封装,这篇文章就基于spring-rabbit,学习一下spring的实现. p. ...
- 2017-9-19 c语言预备作业
题目一: (1)我对邹欣老师博客内容的看法 针对邹欣老师的第一种看法,也就是文中所谈的春蚕与园丁的例子.我认为在大学之前的阶段,师生关系可以如此比喻,因为在中学阶段教师与学生的关系,更多地是一个知识的 ...
- jmeter正则表达式书写
在测试过程中,经常会有以下几种场景,如A接口的返回值,用于B接口中,而且A登陆的账户,每次登陆,这个sid值还是变化的.那么在实际工作中,如何才能A接口中提取参数到B接口中?接下来我们就可以用正则表达 ...
- 性能优化之mysql优化——慢查日志的开启方式和存储
-- MySQL优化 -- mysql 慢查日志的开启方式和存储 -- 1) 查看mysql是否开启慢查询日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 2) ...
- 最新版-MySQL8.0 安装 - 改密码 之坑
1. 需求背景 最近需要在一台性能一般的电脑上使用数据库,所以决定安装MySQL数据库,以前安装都是使用WorkBench自动化安装,但安装过程太慢占用空间过大,于是下载zip压缩包.之所以选择选择M ...
- 虚拟机搭建Zookeeper服务器集群完整笔记
虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...
- 让ckplayer支持m3u8格式的播放
一 ckplayer官网下载. 直接解压到本地,注意配置里面的默认文件路径,最好是放在服务器的根目录下,这样就可以去访问外链接的资源,官网也是这么推荐的,我这里就直接用node开启一个小服务器. 二 ...
- Lintcode394 Coins in a Line solution 题解
[题目描述] There are n coins in a line. Two players take turns to take one or two coins from right side ...
- 解析配置文件redis.conf
units单位: # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 ...
- 修改apache默认主页,重定向404页面
yum 下载apache后默认主页 默认配置文件: vim /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/welcome.conf 跳转页面到 /var/w ...