calendar+fragment+Tab實(shí)現(xiàn)近7天數(shù)據(jù)切換布局

? ? ? 在最近的開發(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)效果如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容