在android开发中会遇到使用fragment切换页面,并且切换的页面都会有网络请求,网络请求成功后会更新相应的fragment页面。如果使用异步网络请求组件android-async-http,会出现这样的情况,当你快速的切换fragment时,每个fragment都会发出新的请求。例如:fragmentA发了网络请求,又切换到了fragmentB,fragmentB又发了网络请求,然后快速的切换两个fragment,切换多次后可能会出现,fragmentA发出的请求返回成功并且使用handler发出消息请求改变fragmentA中的UI时,这时当前的页面正是fragmentB。此时会报空指针错误。
解决此类问题,可以通过第一次加载时缓存,再次切换到此页面时,只有下拉才能请求新数据。另一种方法是,设置一个public static volatile int flag;变量,如果flag为1时则表示当前页面在fragmentA中,当flag为2时表示当前页面在fragmentB中,只当handler收到消息并且flag=1时才能更新fragmentA中的数据。第二种方法实现起来比较繁锁,推荐使用第一种方法。其中1、2、3这些最好存放在一个枚举类型中。
本文讨论了在Android开发中使用Fragment进行页面切换时遇到的问题,特别是关于网络请求的处理。介绍了如何避免快速切换Fragment时产生的重复网络请求问题,提出了两种解决方案:一是通过缓存首次加载的数据;二是使用标志变量区分不同Fragment的状态。
1554

被折叠的 条评论
为什么被折叠?



