AT-PagerAdapter

来源:http://www.cnblogs.com/codekk/archive/2016/05/06/5465716.html
-Advertisement-
Play Games

關於PagerAdapter的粗略翻譯 英文版api地址:PagerAdapter(自備梯子) PagerAdapter instantiateItem(ViewGroup,int) destroyItem(ViewGroup,int,Onject) getCount() isViewFromObj ...


            關於PagerAdapter的粗略翻譯

  英文版api地址:PagerAdapter(自備梯子)

   PagerAdapter

 

          已知直接子類:FragmentPagerAdapterFragmentStatePagerAdapter  

類概述(Class Overview):
基類提供適配器(Adapter)來將一些頁面裝進ViewPager中。也許很有可能你想使用一些經過特殊繼承實現後的子類,比如FragmentPagerAdapter或者FragmenStatePagerAdapter。
當你想實現一個PagerAdapter時,你最少得重載下麵的四種方法:
  • instantiateItem(ViewGroup,int)
  • destroyItem(ViewGroup,int,Onject)
  • getCount()
  • isViewFromObject(View,Object)

PagerAdapter比AdapterViews更加具有普遍性,在視圖更新過程中,PagerAdapter並沒有直接採用視圖回收重用策略(View recycling mechanism),而是使用的一系列的回調(callback)來指示更新過程中的各個步驟過程。如果要求的話,一個PagerAdapter也許會實現一個關於視圖回收的表格,或者會使用一個十分複雜(sophisticated)的方法來管理每一頁的視圖,比如當每一頁是fragment時,會用Fragment 事務處理(transaction).

在ViewPager中,它聯繫每一個頁面是通過一個鍵對象(key object),而不是直接操作每個頁面中的視圖的。這些鍵對象被用來追蹤和唯一標記ViewPager中的每一頁,使得在適配器每一個(頁)的位置變得獨立。PagerAdapter中在調用startUpdate(ViewGroup)時,表明ViewPager中的內容將要發生變化了,在startUpdate(ViewGroup)調用之後,一個或者多個instantiateItem(ViewGroup,int)和/或者destroyItem(ViewGroup,int,Onject)將會陸續執行,最終調用的是finishUpdate(ViewGroup),來表更新已經結束了。等到finishUpdate(ViewGroup) 執行完成之前,那些和鍵對象聯繫起來的視圖,應該在instantiateItem(ViewGroup,int)方法執行完成之前將其添加到父視圖(parentviewgroup)中去,並且將那些要移除的有關的視圖在destroyItem(ViewGroup,int,Onject)方法執行後完成移除。而isViewFromObject(View,Object)方法是用來標記一個視圖是否和一個鍵對象所匹配。

一個簡單PagerAdapter也許會使用這些被鍵對象化的頁面視圖,也就是說會在instantiateItem(ViewGroup,int)調用執行完畢之後會完成創建和添加視圖到父佈局中去,這時也就是被鍵對象化了。與instantItem(ViewGroup,int)對應的方法detroyItem(ViewGroup,int,Object)會移除父佈局中指定的視圖。最後,isViewFromOnject(View,Object)應該這樣實現:return view == object;

PagerAdapter支持數據集的變化。應該註意的是:數據集變化必鬚髮生(執行)在主線程中,並且notifyDataSetChanged()方法的調用就標志著數據集更新的結束。這點有點像AdapterView中所需的那些繼承於BaseAdapter的適配器。數據集的變化包括頁面的添加、移除或者改變位置。對應的ViewPager將會通過調用getItemPosition(Object)獲得當前顯示哪個頁面,並且會保持當前頁面的活力。

 

常量(Constants):

  • public static final int POSITION_NONE

     常量值:-2

  • public static final int POSITION_UNCHANGED

     常量值:-1

公有構造方法(Public Constructors):

  • public PagerAdapter ()

公有方法(Public Methods):

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

   移除對應指定位置(position)的頁面。適配器負責從container中移除這些視圖,儘管它唯一保證在finishUpdate(ViewGroup)之前執行完!

  public void finishUpdate(ViewGroup container)

      當展示頁面變化成功時調用該方法。此時應該確保所有的頁面在適當的時候已經完成了添加、移除工作。

  public abstract int getCount()

      返回可用的視圖數

  public int getItemPosition(Object object)

      當主視圖嘗試去判斷一個子視圖的狀態位置是否發生變化時會調用此方法。返回POSITION_UNCHANGED表示指定子視圖位置狀態沒有發生變化。POSITION_NONE表示子視圖已經不存在於適配器中。

      預設的實現是假設子視圖沒有發生變化,即返回POSITION_UNCHANGED

   Returns:

      int:對象的新位置索引,取址範圍為[0-getCount()]、POSITION_UNCHANGED、POSITION_NONE

  public CharSequence getPageTitle(int position)

      當ViewPager想去獲得一個字元串來分別描述特定的頁面時,會調用該方法。當指定頁面沒有字元串來描述的話就會返回null。預設實現就是返回null

  public float getPageWidth(int position)

      返回相對於ViewPager的測量寬度的比例寬度,返回形式以百分比形式返回

  public Object instantiateItem(ViewGroup container,int position)

      創建指定頁。適配器負責添加視圖到父佈局中去。該方法只確保它會在finishUpdate(ViewGroup)調用之前完成

    Returns:

      Object:返回的這個對象代表了新的一個頁面(Page)。它不一定是一個視圖View,有可能是一些其他的父佈局(Container)。

  public abstract boolean isViewFromObject(View view,Object object)

      判斷一個頁面(Page)是否對應產生了一個唯一的鍵對象,而產生唯一鍵對象的過程是通過instantiateItem(ViewGroup,int)方法的調用和完成實現的。本方法保證了PagerAdapter能夠運行正常。

     public void notifyDataSetChanged()

              此方法應該在應用中被調用。並且是在數據發生變化、對應的視圖需要更新時才可調用。

     public void registerDataSetObserver(DataSetObserver observer)

             註冊一個觀察者來接收當數據發生變化時的回調。

     public void restoreState(Parcelable state,ClassLoader loader)

            恢復和當前適配器相關的任何實例狀態,前提是你要在之前就通過saveState()方法保存了實例狀態。

     public Parcelable saveState()

            保存任何和當前適配器有關的數據,以供在之後UI狀態發生重建時的實例狀態恢復

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

            調用該方法是為了告知適配器哪個子頁面目前被視為主要的子頁面。它對應的是給用戶展示的當前頁。

     public void startUpdate(ViewGroup container)

            當展示頁有變化並且將要開始更新時會調用該方法。

    public void unregisterDataSetObserver(DataSetObserver observer)

           解除一個觀察者對於數據變化時的回調方法的監視。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在開發中,我們經常需要更新列表,並將列表拉倒最底部,比如發表微博,聊天界面等等, 這裡有兩種辦法,第一種,使用scrollTo(): 第一種實現相對比較麻煩,更推薦使用第二種方式,使用fullScrol() 下麵我們看一下這個函數: scrollView.fullScroll(ScrollView. ...
  • 這篇文章里我將不過多的談及理論知識,這些東西會的自然會,不會的,看多了也是雲里霧裡。下麵我講更多的用代碼+註釋的方式來講如何使用NSOperation和NSOperationQueue。 1、NSOperation。是抽象類,不能夠直接使用,而是使用子類NSInvocationOperation和N ...
  • iOS 雜筆 21(self.name = “object” 和 _name =”object” 有什麼不同?) 問題如題,這是考察對屬性與變數的瞭解而已。 self.name = “object” 是self調用了setName: _name =”object” 是對變數的直接賦值 (屬性與變數的 ...
  • 1. CoreData資料庫框架的優勢 1> CoreData歷史 CoreData數據持久化框架是Cocoa API 的一部分,首次在iOS5版本的系統中出現,它允許按照實體-屬性-值模型組織數據,並以XML、二級制文件或者SQLite數據文件的格式持久化數據。 CoreData主要提供對象 關係 ...
  • KVC: key value coding,鍵值編碼.是一種通過使用屬性的名稱(key)來間接訪問對象屬性的方法.這個方法可以不用通過 setter/getter 方法來訪問對象的屬性.該方法使用的實質是,是使用 valueForKey來代替 getter 方法, setValueForKey 來代 ...
  • 1.Volley和Gson結合使用——Volley適用於小型數據,多次的請求,使用Gson解析時,伺服器數據的鍵值不能包含常用的標識符如:class.....等,這些就需要與服務端小伙伴商量了, public class MainActivity extends Activity { private ...
  • 用UICollectionView實現無限輪播圖 效果 源碼 https://github.com/YouXianMing/Animations 細節 ...
  • 1.打開資料庫 #import "ViewController.h" #import "FMDB.h" @interface ViewController () @property (nonatomic, strong) FMDatabase *db; @end @implementation Vi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...