caoporm97国产在线视频|欧美性XXXXX精品|一本一道久久a久久精品综合开|精品久久久久久久久久久AⅤ|

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號 掃一掃關(guān)注
小程序
tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

淺談Android開發(fā)之ViewPager的工作原理

百恒網(wǎng)絡(luò) 2017-07-14 6155

在南昌APP開發(fā)中,ViewPager 和PagerAdapter類在后臺為我們完成了很多工作。那么ViewPager是如何工作的呢?在為大家介紹ViewPager的工作原理前,我們需要知道的是:大多情況下,我們無需了解其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。不過,如果要自己實(shí)現(xiàn)PagerAdapter接口,那就要了解ViewPager-PagerAdapter和Recycler-View-Adapter各自關(guān)系的異同了。

那么什么時候需要自己實(shí)現(xiàn)PagerAdapter接口呢?如果需要ViewPager托管非fragment視圖時,那就需要實(shí)現(xiàn)原生PagerAdapter接口。例如,在ViewPager中托管圖片這樣的常見視圖對象時。

說到這里,相信大家又有疑問了,為什么選擇使用ViewPager而不是RecyclerView呢?別急,南昌APP制作開發(fā)公司小編這就來告訴大家:

那是因?yàn)橛捎跓o法使用現(xiàn)有的Fragment,在CriminalIntent應(yīng)用中使用RecyclerView需處理大量內(nèi)部實(shí)現(xiàn)工作。Adapter需要我們及時地提供View。然而,決定fragment視圖何時創(chuàng)建的是FragmentManager。因此,當(dāng)RecyclerView要求Adapter提供fragment視圖時,我們無法立即創(chuàng)建fragment并提供其視圖。

這就是ViewPager存在的原因。它使用的是PagerAdapter類,而非原來的Adapter。PagerAdapter要比Adapter復(fù)雜得多,因?yàn)樗幚砀嗟囊晥D管理工作。以下為它的基本內(nèi)部實(shí)現(xiàn)。

PagerAdapter不使用可返回視圖的onBindViewHolder(...)方法,而是使用下列方法:

public Object instantiateItem(ViewGroup container, int position)

public void destroyItem(ViewGroup container, int position, Object object)

public abstract boolean isViewFromObject(View view, Object object)

PagerAdapter.instantiateItem(ViewGroup, int)方法告訴pager adapter創(chuàng)建指定位置的列表項(xiàng)視圖,然后將其添加給ViewGroup視圖容器,而destroyItem(ViewGroup, int,Object)方法則告訴pager adapter銷毀已建視圖。注意,instantiateItem(ViewGroup, int)方法并不要求立即創(chuàng)建視圖。因此,PagerAdapter可自行決定何時創(chuàng)建視圖。

視圖創(chuàng)建完成后,ViewPager會在某個時間點(diǎn)注意到它。為確定該視圖所屬的對象,ViewPager會調(diào)用isViewFromObject(View, Object) 方法。這里, Object 參數(shù)是instantiateItem(ViewGroup,int)方法返回的對象。因此,假設(shè)ViewPager調(diào)用instantiateItem(ViewGroup, 5)方法返回一個A對象,那么只要傳入的View參數(shù)是第5個對象的視圖,isViewFromObject(View, A)方法就應(yīng)返回true值,否則返回false值。

對ViewPager來說,這是一個復(fù)雜的過程,但對于PagerAdapter來說,這算不上什么。因?yàn)镻agerAdapter只要能夠創(chuàng)建、銷毀視圖以及識別視圖來自哪個對象即可。這樣的要求顯然很寬松,因而PagerAdapter能夠比較自由地通過instantiateItem(ViewGroup, int)方法創(chuàng)建并添加新的fragment,然后返回可以跟蹤管理的Object(fragment)。以下為isViewFromObject(View, Object)方法的具體實(shí)現(xiàn):

@Override

public boolean isViewFromObject(View view, Object object) {

return ((Fragment)object).getView() == view;

}

可以看到,每次需要使用ViewPager時,都要覆蓋實(shí)現(xiàn)PagerAdapter的這些方法,這真是一種磨難。幸好我們有FragmentPagerAdapter和FragmentStatePagerAdapter便利類,以至于我們不會那么麻煩!

以上便是南昌APP開發(fā)公司小編為大家介紹的關(guān)于APP開發(fā)中ViewPager 的工作原理,如果想進(jìn)一步了解這方面的知識的朋友,歡迎大家繼續(xù)關(guān)注百恒網(wǎng)絡(luò)官網(wǎng)動態(tài),我們將定期為您更新技術(shù)文章。如有需要APP開發(fā)、網(wǎng)站建設(shè)等方面的服務(wù),可隨時來電和我們聯(lián)系,本公司隨時為您效勞。


400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×