2012-05-23 63 views
9

在Android的PagerAdapter類中的方法getItemPosition的文檔指出,它是:什麼時候應該getItemPosition考慮物品位置的變化?

當主機視圖正試圖確定一個項目的位置已經改變時調用。

此方法應該被調用來指示該適配器的項目組中項目的位置是否已更改。

但是,它從來沒有聲明重寫方法應該考慮更改位置。這是否意味着位置與上次調用項目getItemPosition時的位置不同?這是否意味着該項目的位置與上次調用notifyDataSetChanged時的位置不同?或者這是否意味着該項目的位置與該項目添加到viewPager時的位置不同?

回答

11

您可以在ViewPager.java中看到getItemPosition僅在dataSetChanged中被調用。這意味着如果項目的位置不同於上次調用的dataSetChanged,則該項目的位置發生了變化。

我不會太擔心「改變」的含義;有兩種情況:

  1. 添加的項從不改變的位置,然後getItemPosition回報POSITION_UNCHANGED;
  2. 項目的位置發生更改,或項目被刪除。如果物品位置沒有變化,則返回POSITION_UNCHANGED或實際位置沒有區別。所以,保證實現簡單,你可以返回的位置(或POSITION_NONE),而忘記了POSITION_UNCHANGED ..
7

默認情況下,項目在ViewPager的位置被認爲是固定的;那爲什麼getItemPosition()默認返回POSITION_UNCHANGED。當您移動物品時,ViewPager必須知道刪除物品的位置(物品的舊位置)以及添加物品的位置。這是getItemPosition()用於。它允許你告訴ViewPager哪個項目放在哪裏,即使你的頁面已經被實例化了。

getItemPosition()僅在您的PagerAdapter上調用notifyDataSetChanged()時纔會調用。按照設計,這意味着「已更改」意味着「從ViewPager上次填充其頁面時起改變」,因爲notifyDataSetChanged()會導致ViewPager在必要時重新繪製子項。換句話說:「改變」具有你提到的任何含義;無論哪一個是最近發生的。

我認爲getItemPosition如果沒有樣本就很難理解。 See my example of how to use getItemPosition(...) here;我認爲它會澄清一些事情。

相關問題