Activity, ViewPager里面三个Fragment,A、B、C;C进行操作之后,B报错getActivity为空,导致ListViewAdapter内getSystemService存在空指针,即getActivity为空。new Fragment()在Activity的onCreate()进行。
原因
Activity被系统回收,但fragment的生命周期不会随着Activity被回收,导致出现null的情况
- Activity被销毁,用户重新返回时,onCreate会被调用,则三个Fragment就会被重新创建,装入到list中

- 展示Fragment时,Adapter先通过Manager.findByTag()获取,若为空,再从List中获取。
- 当界面被回收,系统自动恢复界面状态(包括之前的Fragment)。Adapter显示Fragment1,通过ByTag获取Fragment,发现已经有实例(旧Fragment),不会去调用获取新的Fragment(在onCreate中创建的)。直接显示旧的Fragment,但由于之前的Activity已经被销毁,所以getActivity为空。
解决
1、在Adapter的getItem里面创建Fragment,根据position创建对应的。
- 要获取Fragment的引用,可通过findByTag获取。Tag组成为viewId和Fragment位置,如下图

2、在Fragment的生命周期,onAttach中保存对Activity的引用。
版权声明:本文为qq_43467051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。