之前项目中遇到一个问题,一个activity中有4个fragment,互相切换,我需要在fragment切换时,将切入前台的fragment的页面数据刷新,网上很多方法都不太好用。
之前一直在onResume()中调用,但是并不会在fragment互相切换中调用,因为他依赖于activity,但是fragment的切换并不会影响他的activity:
activity的生命流程是:onCreate(),onStart(),onResume()------>running
fragment的切换都在running状态中,所以,在fragment中调用onRsume()并不能起到刷新作用。
最近研究fragment的API,无意中发现一个方法public void onHiddenChanged(boolean hidden),突然就把之前的问题解决了。它在fragment中的作用有点类似于activity中的onResume方法。每次当fragment被切换到前台或者后台时,就被触发,这样就能实现在fragment相互切换时,刷新数据的作用了。
但是,在使用这个方法的时候需要注意,你的刷新操作如果涉及到页面组件,必须做一个flag用来标识页面是否已被创建,如果已被创建则可刷新页面,否则,会报空指针异常。
因为,我发现,在创建页面的过程中就会调用到此方法,这个时候,fragment中所包含的组件并没有被初始化。