1. 程式人生 > >ViewPager(一) 初相識

ViewPager(一) 初相識

ViewPager常用嗎?

ViewPager是一個靈活切換頁面場景中廣泛使用的一個容器,我們所熟知的絕大部分App應用都使用了它。型如WeChat,今日頭條,淘寶等中的主介面,在不同的型別button下切換View。由於其出色的快取機制,v4包的加成,使其處理平級頁面間切換更加的得心應手,也備受廣大程式設計師所青睞。

Google是這樣定義ViewPager的:Layout manager that allows the user to flip left and right through pages of data.

翻譯過來就是:ViewPager是一個允許使用者左右翻轉資料頁的佈局管理器

有了這個或通俗或專業的解釋,我們瞭解了其重要性,接下來就是展現它實力的時候了。

ViewPager怎麼用?

根據分層思想及責任明確分離的思想,嚴謹的谷歌工程師,肯定不會把所有的處理邏輯放在這一個類裡來處理,對於資料和 View 的處理,ViewPager 使用了和 ListView 列表容器相似的介面卡類,ViewPager 的介面卡叫 PagerAdapter,這是一個抽象類,不能例項化,所以他還有兩個兒子,FragmentPagerAdapter 和 FragmentStatePagerAdapter,從名字,我們能夠猜到,都是處理頁面是Fragment的情況,而 PagerAdapter 則是處理通用View的介面卡,只是使用它的時候我們一定要自定義一個類繼承這個基類。

那麼為什麼Fragment谷歌要給兩個介面卡來處理呢?

Fragment 是個大號的容器,裡邊可以展示大量的頁面,處理大量的列表,所以每一頁,可能會是有大量的資料,而前一個介面卡 FragmentPagerAdapter 是一個不管理 Fragment 狀態的介面卡,這就意味著,許多碎片的 Fragment 會佔用大量的記憶體(在少數情況下Fragment還是有可能會丟失的),如果在 Fragment 頁面較少,或者每個 Fragment 頁面中持有的資料較少的情況下,我們可以選擇使用較為簡單的介面卡,不用關注並管理 Fragment 的狀態,加快業務開發;另一種情況及時當大量碎片的Fragment佔用的記憶體是不能被容忍的,這個時候後一個介面卡 FragmentStatePagerAdapter

就派上用場了。這個介面卡儲存並綁定了狀態,在狀態為銷燬的狀態下,可以去重新獲取。但是頻繁建立又會導致切換頁面的效能消耗。所以在選擇對應的介面卡的時候,要根據具體的業務邏輯進行判斷,選擇合適的介面卡。

谷歌為開發者提供的這兩個親兒子,其實是考慮了大量的應用場景,在一級頁面下的同級切換,用的最多的一定會是Fragment,而熟悉Fragment使用的開發人員就會知道Fragment建立和銷燬涉及FragmentManager和FragmentTransaction,而這些邏輯也是很頭疼的,谷歌的提供的這兩個介面卡就是幫你解決這個煩惱的。你只需要在建立他們的時候傳入FragmentManager,其他的attach和detach就不用你來管了。

說了這麼多,終於到了擼碼的時刻了!!!

我們一邊擼,一邊說。。。