ViewPager空指针错误,android.support.v4.view.ViewPager.onSaveInstanceState
来源:互联网 发布:开启式电机铭牌数据 编辑:程序博客网 时间:2024/03/29 21:47
support.v4 包为我们提供了一个非常实用的滑动控件ViewPager,在使用ViewPager时有一个需要注意的地方:
即:
android.support.v4.view.ViewPager.onSaveInstanceState 空指针等等...
错误如下:
...
Caused by: java.lang.NullPointerException
at android.support.v4.view.ViewPager.onSaveInstanceState(ViewPager.java:507)
at android.view.View.dispatchSaveInstanceState(View.java:6068)
at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:1180)
...
...
问题分析:
在跳转其他activity 或者在关闭当前activity 的时候;如果你的当前activity有用到ViewPager,但是还没有给ViewPager setAdapter ,就会有以上异常;
--
解决方法:
只要有ViewPager 在界面初始化的时候就必须给ViewPager 设置adapter,不论你当前是否用到。并且一个ViewPager 最好只声明一次,设置一次adapter,不然可能会有的时候界面显示不出来;
如果布局代码中出现了ViewPager控件,无论使用与否,在onCreate时必须获得它的对象,并setAdapter(),否则在Activity切换时会报onSavedInstanceState空指针错误。
还有一些当前Activity无法正常停止之类的错误信息。
这实际上也是这个包的一个小小的bug,网上很多开源的项目已经对这个bug进行了修正,涉及的ViewPager核心代码修改如下,修改前:
- if (f.mSavedViewState != null) {
- if (result == null) {
- result = new Bundle();
- }
- result.putSparseParcelableArray(
- FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
- }
- if (!f.mUserVisibleHint) {
- // Only add this if it's not the default value
- result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
- }
修改之后:
- if (f.mSavedViewState != null) {
- if (result == null) {
- result = new Bundle();
- }
- result.putSparseParcelableArray(
- FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
- }
- if (!f.mUserVisibleHint) {
- if (result == null) {
- result = new Bundle();
- }
- // Only add this if it's not the default value
- result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
- }
- ViewPager空指针错误,android.support.v4.view.ViewPager.onSaveInstanceState
- android.support.v4.view.ViewPager 引入,却报XML 错误
- 添加android-support-v4 错误 java.lang.ClassNotFoundException: android.support.v4.view.ViewPager in loade
- 添加android-support-v4 错误 java.lang.ClassNotFoundException: android.support.v4.view.ViewPager in loade
- 找不到android.support.v4.view.ViewPager
- 找不到android.support.v4.view.ViewPager
- Android 使用viewpager时报Didn't find class "android.support.v4.view.Viewpager"错误
- ViewPageIndicator中引入supportV4包时错误Error inflating class android.support.v4.view.ViewPager
- 引入工程出现The type android.support.v4.view.ViewPager cannot be resolved. 错误
- 找不到android.support.v4.view.ViewPager里面的包
- java.lang.ClassCastException: android.support.v4.view.ViewPager$LayoutParams
- Error inflating class android.support.v4.view.ViewPager问题解决
- Updated SDK version, getting ClassNotFoundException: android.support.v4.view.ViewPager
- android.support.v4.view.ViewPager 如何动态更换显示内容
- android.support.v4.view.PagerTabStrip 实现切换viewpager
- android.support.v4.view.ViewPager控件的位置
- ViewPager空指针错误
- net.sf.json包 报java.lang.VerifyError错误 以及 inflate android.support.v4.view.ViewPager错误
- Linux Shell 脚本攻略学习--四
- poj 1690 (Your)((Term)((Project)))
- RVDS4.0下 RVISS仿真(1)
- 没事学着别人玩博客
- make报错:"/usr/bin/ld: cannot find -lXXX"
- ViewPager空指针错误,android.support.v4.view.ViewPager.onSaveInstanceState
- Java XML StAX
- 中国版Ubuntu操作系统:“麒麟” ubuntukylin-13.04-desktop
- 完全卸载oracle11g
- ajax 与后台交互后返回相应的字符串
- linux下shell编程(二)------修订版
- mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Schedu
- Java 垃圾回收 GC
- 浏览器的工作原理:新式网络浏览器幕后揭秘