中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發之ViewPager的工作原理是什么

發布時間:2022-04-20 16:39:00 來源:億速云 閱讀:120 作者:iii 欄目:大數據

這篇“Android開發之ViewPager的工作原理是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android開發之ViewPager的工作原理是什么”文章吧。

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

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

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

那是因為由于無法使用現有的Fragment,在CriminalIntent應用中使用RecyclerView需處理大量內部實現工作。Adapter需要我們及時地提供View。然而,決定fragment視圖何時創建的是FragmentManager。因此,當RecyclerView要求Adapter提供fragment視圖時,我們無法立即創建fragment并提供其視圖。

這就是ViewPager存在的原因。它使用的是PagerAdapter類,而非原來的Adapter。PagerAdapter要比Adapter復雜得多,因為它要處理更多的視圖管理工作。以下為它的基本內部實現。

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

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

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

@Override

public boolean isViewFromObject(View view, Object object) {

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

}

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

以上就是關于“Android開發之ViewPager的工作原理是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑川县| 达州市| 蓝田县| 夏河县| 墨竹工卡县| 安陆市| 肇源县| 麻栗坡县| 泰宁县| 隆化县| 新兴县| 浮梁县| 丰都县| 荆门市| 普安县| 黑山县| 旌德县| 崇左市| 弥渡县| 达孜县| 康乐县| 金秀| 昌宁县| 洛浦县| 太原市| 开远市| 泸州市| 仙居县| 石楼县| 定边县| 合肥市| 宜兴市| 保亭| 万宁市| 大丰市| 清原| 盐亭县| 古交市| 舟曲县| 济宁市| 鄂托克前旗|