今天在写viewpager中的fragmnent的时候遇到了奇怪的问题,我的fragment中用了RecyclerView,而我的viewpager中有多个这样的fragment,业务要求最后实现在具体代码上就是这些fragment中要互相通信,当然了,考虑到fragment中的生命周期和外面的viewpager也要通信,所以我采取了比较稳的办法,就是通信全部用广播来做,我的fragment的数量是11个的,而且不能销毁滑过的页面,因为一销毁,再次访问的时候,就得重新刷新数据,这个用户体验不是很好,可是最后问题出来了,广播通知出去了,各个fragment也接收了,list的数量也变化了,notifyDataSetChanged对象指向刷新也没有任何问题,问题就是,如果两个fragment的下标间隔超过一个,这个notifyDataSetChanged什么用都没有,可奇怪的是在相邻两个fragment之间发广播,notifyDataSetChanged是没有任何问题
我起初一直认为是notifyDataSetChanged是不是认为对象没有任何变化所以什么事情都不做,可后来发现相邻两个fragment之间又是没有任何问题的,这就排除了notifyDataSetChanged的问题,后来注意到viewpager的预加载机制,也就是
viewPager.setOffscreenPageLimit(1)这句话,
如果不写这句话,他就认为是一个,也就是说,他会缓存当前页面的前一个后和后一个,我没有时间去看系统源码,因为项目比较着急,所以当我想到这里的问题的时候,我把这个 (1)改成了11,也就是我的fragment的数量的时候,发现我前面的问题都不是问题了,顺利解决掉,后来仔细想了下这个原因,虽然说那些fragment还活着,但是viewpager默认为我当前只有三个页面活着,且叫活着吧,认为其余的都是沉睡的(就这么比喻吧),所以我再去发广播,他虽然能收到广播,也能接收到数据,但就是认为睡着了,不给刷新页面,这也是为什么我改成让他预加载11个之后,就没有任何问题的原因,但是这样做的后果就是这11个fragment一旦牵扯到数据量比较大,大到内存撑不住的时候(目前单个app只有32M) 这个页面可能直接崩溃,这样就要建议做数据持久化,内存消耗百分比去防止崩溃了
当然了,如果你有更好的办法,那更好,希望不吝赐教!!