viewpager java.lang.IllegalArgumentException:The observer is null
来源:互联网 发布:java基本语法 编辑:程序博客网 时间:2024/05/29 15:00
最近在做竖向切换的ViewPager时遇到了问题。。。
首先这个竖向的ViewPager是参照github上的大神做的,github地址请参考:
https://github.com/simplezhli/ChangeTabLayout
接下来说说我遇到的坑吧。
我的项目中使用的是MVP架构的fragment,这个VerticalViewPager就在其中的一个fragment中。由于使用了MVP架构,界面的显示只是一个view,加载在同一个fragment上,所以整个工程中只有一个BaseFragment。
首次打开该fragment的时候,界面显示没有问题。然后在退出该fragment时没有销毁该fragment,只是将该fragment上ViewHandler隐藏,对应的ViewHandler中的代码如下:
@Override public void onHiddenChanged(boolean hidden) { if (!hidden) { initData(); } else { mVerticalViewPager.removeAllViews(); } } /** * 初始化界面参数 */ private void initData() { mExamId = mActivity.getIntent().getStringExtra(ConstValue.EXAM_RECORD_ID); mReportPresenter = new ReportPresenter(this, mActivity); mVerticalViewPager.post(new Runnable() { @Override public void run() { mReportPresenter.getFileInfo(mExamId); } }); onSetProgressBarVisibility(View.VISIBLE); }.... @Override public void showWaveView(List<View> waveViews) { mWaveViewList = waveViews; ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(mWaveViewList); mVerticalViewPager.setAdapter(viewPagerAdapter); }
BaseFragment中的代码:
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (null != mViewHandler) { mViewHandler.onHiddenChanged(hidden); mViewHandler.setHidden(hidden); } }
再次打开界面时,问题出现了:
Caused by: java.lang.IllegalArgumentException:The observer is null. android.database.Observable.registerObserver(Observable.java:45) android.support.v4.view.PagerAdapter.registerDataSetObserver(PagerAdapter.java:296) rkhy.com.ecg.view.VerticalViewPager.setAdapter(VerticalViewPager.java:477) rkhy.com.ecg.fragment.mvp.view.impl.ReportViewHandler.showWaveView(ReportViewHandler.java:146)
从bug描述中可知,是在setAdapter时报错,查找VerticalViewPager对应的代码如下:
在看下自定义的Adapter中没有重写这个RegisterDataSetObserver,那看PagerAdapter中的这个方法:
/** * Register an observer to receive callbacks related to the adapter's data changing. * * @param observer The {@link android.database.DataSetObserver} which will receive callbacks. */ public void registerDataSetObserver(DataSetObserver observer) { mObservable.registerObserver(observer); }
可以看出,PagerAdapter中对于视图的更新使用的是观察者模式,在这里注册观察者。而在我自定义的VerticalViewPager中,由于第二次进入时,mAdapter不为空,所以执行了销毁之前视图的操作,但是在操作之前首先将观察者注册为null,这就导致该问题的发生。
解决方法:
1. 自定义的VerticalViewPager,在销毁之前的视图之前,不再将观察者注册为null;
2. 在自定义的Adapter中,重写registerDataSetObserver方法,并增加是否为null的判断:
@Override public void registerDataSetObserver(DataSetObserver observer) { if (null != observer) { super.registerDataSetObserver(observer); } }
OK,这个问题就解决了~ 再次测试代码,问题解决了。
- viewpager java.lang.IllegalArgumentException:The observer is null
- java.lang.IllegalArgumentException: The observer is null.
- java.lang.IllegalArgumentException: The observer is null.
- Android使用ViewPager导致java.lang.IllegalArgumentException: The observer is null.
- java.lang.IllegalArgumentException: The observer is null.异常解决方案
- android java.lang.IllegalArgumentException: The observer is null 异常解决
- java.lang.IllegalArgumentException: The observer is null.最终解决方案
- 安卓java.lang.IllegalArgumentException: The observer is null.解决方案
- java.lang.IllegalArgumentException: The observer is null.异常解决
- 解决方案:java.lang.IllegalArgumentException: The observer is null
- android退出一个含有listview的activity时报java.lang.IllegalArgumentException: The observer is null.
- IllegalArgumentException:The observer is null的解决方法
- java.lang.IllegalArgumentException: host parameter is null
- java.lang.IllegalArgumentException: host parameter is null
- java.lang.IllegalArgumentException: host parameter is null
- java.lang.IllegalArgumentException: the bind value at index 1 is null or java.lang.IllegalArgumen
- 问题:java.lang.IllegalArgumentException:the bind value at index is null
- java.lang.IllegalArgumentException: the bind value at index 1 is null
- zookeeper+storm安装配置
- appium 1.7.1 + python环境搭建
- Android 插件化框架 RePlugin 使用心得
- vue 插槽slot
- APP研发博文,做个记录好找
- viewpager java.lang.IllegalArgumentException:The observer is null
- 阻抗匹配
- 使用node搭建一个简单服务
- [vue.js音乐App开发记录]Vuex的应用及应用时的项目文件结构设计以完整demo实例解释
- JavaScript<四>
- linux ssh无密钥登陆
- TabLayout +ViewPager+Fragment + RecycleView + webView加载本地html
- 最大连续子序列和
- CXF简介