calendar+fragment+Tab实现近7天数据切换布局
在最近的开发项目中,需要实现显示最近7天的数据,于是尝试使用Tab做布局切换,fragment做布局承载,calendar作为传入日期的变量参数。
话不多少,先上代码:
重点在getItem中实现了7个fragment的赋值。c.add(Calendar.DATE, position),该函数在当前日期的基础上position天,大大的利用了fragment自定义的方法来实现日期累计加1,累计7天的日期传参。
关于在getItem方法中这样调用此方法的原由,我们首先来分析下getItem方法。
首先FragmentPagerAdapter 继承自 PagerAdapter,FragmentPagerAdapter.instantiateItem() 的实现中,调用了一个新增的虚函数 getItem(),因此,我们还至少需要实现一个 getItem()。因此,总体上来说,相对于继承自 PagerAdapter,更方便一些。
getItem()
该类中新增的一个虚函数。函数的目的为生成新的Fragment 对象。重载该函数时需要注意这一点。在需要时,该函数将被 instantiateItem() 所调用。
如果需要向 Fragment 对象传递相对静态的数据时,我们一般通过 Fragment.setArguments() 来进行,这部分代码应当放到 getItem()。它们只会在新生成 Fragment 对象时执行一遍。所以我们在初始化日期数据的时候就放在了改函数中。
如果需要在生成 Fragment 对象后,将数据集里面一些动态的数据传递给该 Fragment,那么,这部分代码不适合放到 getItem() 中。因为当数据集发生变化时,往往对应的 Fragment 已经生成,如果传递数据部分代码放到了 getItem() 中,这部分代码将不会被调用。这也是为什么很多人发现调用 PagerAdapter.notifyDataSetChanged() 后,getItem() 没有被调用的一个原因。
实现效果如下: