使用观察者模式解决ViewPager加载照片中更新其他Fragment内容
1. 问题
在用ViewPager加载fragment浏览图片的时候,需要删除当前浏览的照片,删除后要加载下一张或者上一张照片,并且照片的位置等信息都要更新,
但是因为ViewPager每次都是预加载前一张和后一张,在删除照片之前前一张和后一张的照片信息已经加载完成了,
那这个时候该如何更新已经加载了的照片的信息呢,并且当前又该如何显示下一张照片呢,尝试了很多方法都失败了,当然也可以禁止预加载,但是用户体验不好;
经过一天的研究,发现安卓的观察者模式能够解决这个问题,于是研究了下,完美解决了。
2. 观察者模式
观察者模式的原理网上一大堆,简单点说就是定义一个被观察者和多个观察者,被观察者改变的时候通知所有的观察者都改变;
在实际使用的时候和回调函数有点相似,但是却比回调功能更强,这里不过多的介绍观察者模式了,网上有一个朋友介绍得很详细了,可以了解下:
http://www.apkbus.com/forum.php?mod=viewthread&tid=112815&extra=page%3D1&page=1
3. 解决问题
使用观察者模式,最重要的一点就是得知道谁是观察者Observer,谁是被观察者Observable,那么在本文讨论的问题中,观察者就是ViewPager中的每一项,
被观察者需要自定义一个继承自Observable的类,在这个类中做一些接口做数据的变更,需要注意一点,就是在更新数据的时候必须加上setChanged();和notifyObservers();通知观察者更新,代码如下: