自從Android在3.0推出Fragment之后,現(xiàn)在很多應用的設計都是建立在Fragment的基礎上,像是多個tab切換這種需求,就可以使用Fragment,并且Fragment提供了一系列生命周期的回調,可以幫助我們實現(xiàn)很多特殊的需求,像是數(shù)據(jù)保存和恢復等。
Fragment本身的出現(xiàn)是為了解決平板多屏界面展示問題,因為平板可以展示比手機更多的內容,所以使用Fragment可以實現(xiàn)根據(jù)不同尺寸展示不同內容的需求,而這不同內容更多是指在更大的尺寸顯示更多的內容。
隨著人們的實際編碼工作,發(fā)現(xiàn)使用Fragment可以更好的管理界面,因為一個Activity可以管理多個Fragment,如果將Fragment當做一個界面,我們可以實現(xiàn)多個界面的切換,并且這種工作比起以前在布局文件中控制可見來講,更好管理,并且布局可以復用,導致Activity的作用就只是Fragment的管理容器而已,加上Fragment擁有和Activity同步的生命周期,所以很多業(yè)務工作都可以放在Fragment中。
現(xiàn)在很多界面的開發(fā)工作都是使用Activity加多個Fragment的設計模式,這是很好的方式,但要想完全掌握Fragment這個利器,需要了解的工作非常多,并且有關Fragment可以開展相當多的話題,像是Fragment之間的參數(shù)傳遞,F(xiàn)ragment之間的切換和狀態(tài)的保存,等等,這些都是相當大的范圍,而且谷歌也看到Fragment的使用前景,封裝了DialogFrament,ListFragment等方便開發(fā)者使用,F(xiàn)ragment和Activity之間生命周期的關系,還可以做監(jiān)聽Activity生命周期實現(xiàn)某些功能,像是結束的時候停止當前異步任務等需求。
仔細看Fragment的代碼,我們發(fā)現(xiàn)這無非就是在Activity的布局中指定的地方添加相應的布局,然后綁定一堆監(jiān)聽用以實現(xiàn)各種生命周期的回調。
我們甚至可以模擬Android源碼,自己搞一個Fragment的替代品。
我們這次的嘗試是實現(xiàn)Fragment界面復用的功能,這是最常用的場景。
對應FragmentManager,我們用ViewHolderManager來管理View,對應Fragment,用PartViewHolder。
為了方便我們替換View的時候能夠更快的找到對應的View,需要一個HashMap,類似FragmentManager在查找Fragment一樣,key值為我們指定的id,value則是對應的PartViewHolder。
PartViewHolder只是一個抽象,它表示的是View的占位,更確切的說,是View的控制類,因此它具有一些共同的行為,實現(xiàn)上是一個抽象類。
在Java中,定義一組抽象有兩種:抽象類和接口,這兩種都是多態(tài)的表現(xiàn)。抽象類