? ? ? 在最近的開發(fā)項(xiàng)目中,需要實(shí)現(xiàn)顯示最近7天的數(shù)據(jù),于是嘗試使用Tab做布局切換,fragment做布局承載,calendar作為傳入日期的變量參數(shù)。
話不多少,先上代碼:

重點(diǎn)在getItem中實(shí)現(xiàn)了7個(gè)fragment的賦值。c.add(Calendar.DATE, position),該函數(shù)在當(dāng)前日期的基礎(chǔ)上position天,大大的利用了fragment自定義的方法來(lái)實(shí)現(xiàn)日期累計(jì)加1,累計(jì)7天的日期傳參。
關(guān)于在getItem方法中這樣調(diào)用此方法的原由,我們首先來(lái)分析下getItem方法。
首先FragmentPagerAdapter 繼承自 PagerAdapter,F(xiàn)ragmentPagerAdapter.instantiateItem() 的實(shí)現(xiàn)中,調(diào)用了一個(gè)新增的虛函數(shù) getItem(),因此,我們還至少需要實(shí)現(xiàn)一個(gè) getItem()。因此,總體上來(lái)說,相對(duì)于繼承自 PagerAdapter,更方便一些。
getItem()
該類中新增的一個(gè)虛函數(shù)。函數(shù)的目的為生成新的Fragment 對(duì)象。重載該函數(shù)時(shí)需要注意這一點(diǎn)。在需要時(shí),該函數(shù)將被 instantiateItem() 所調(diào)用。
如果需要向 Fragment 對(duì)象傳遞相對(duì)靜態(tài)的數(shù)據(jù)時(shí),我們一般通過 Fragment.setArguments() 來(lái)進(jìn)行,這部分代碼應(yīng)當(dāng)放到 getItem()。它們只會(huì)在新生成 Fragment 對(duì)象時(shí)執(zhí)行一遍。所以我們?cè)诔跏蓟掌跀?shù)據(jù)的時(shí)候就放在了改函數(shù)中。
如果需要在生成 Fragment 對(duì)象后,將數(shù)據(jù)集里面一些動(dòng)態(tài)的數(shù)據(jù)傳遞給該 Fragment,那么,這部分代碼不適合放到 getItem() 中。因?yàn)楫?dāng)數(shù)據(jù)集發(fā)生變化時(shí),往往對(duì)應(yīng)的 Fragment 已經(jīng)生成,如果傳遞數(shù)據(jù)部分代碼放到了 getItem() 中,這部分代碼將不會(huì)被調(diào)用。這也是為什么很多人發(fā)現(xiàn)調(diào)用 PagerAdapter.notifyDataSetChanged() 后,getItem() 沒有被調(diào)用的一個(gè)原因。
實(shí)現(xiàn)效果如下:
