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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...