2015-11-06 44 views
2

我在TabLayout中使用ViewPagerViewPager有3個頁面,其中每個頁面都是一個片段。 當包含TabLayout的活動啓動時,會爲fragment1調用片段回調方法upto onResume(),這是預期的,並且fragment1會顯示在屏幕上。爲什麼片段的onStart和onResume方法被調用,即使該片段不在前景中

然而,logcat顯示回調方法也被稱爲片段2,儘管片段2當前沒有顯示在屏幕上。這對我來說看起來很奇怪,因爲onResume應該只在片段即將變得可見時才被調用。

當我選擇fragment2時,onResume被稱爲fragment3,儘管fragment3沒有被顯示。所以似乎有這種行爲的模式。

這可能是什麼原因造成的?

更新:我使用的ViewPagerFragmentPagerAdapter的子類。

+0

我正在使用'FragmentPagerAdapter'的子類。但是,不管我使用哪個適配器,當片段在屏幕上不可見時,如何調用'onResume'。這不違反'onResume'的含義嗎? – Amit

回答

1

兩件事情導致此行爲:

  1. 片段並不需要有一個UI,在這種情況下,這是從來沒有在屏幕上「看得見」。基本上,如果一個片段附加到一個活動,其生命週期方法將被適當調用。

  2. ViewPager將項目加載到當前顯示的項目的任一側。這是爲了在用戶用他的手指滾動頁面時顯示內容。默認情況下,屏幕外頁面限制爲1,這意味着當您的第一個片段是當前項目時,第二個片段將在屏幕上加載以準備滾動。

您可以隨時使用getCurrentItem()來查看ViewPager顯示哪個項目。如果您遇到問題,因爲片段在超出屏幕外頁面限制時被破壞並不必要地重新創建,則可以使用setOffscreenPageLimit()增加頁面限制。

3

如果是ViewPager的默認行爲,則在啓動ViewPager時調用下一個Fragment

您需要使用setOffscreenPageLimit()

setOffscreenPageLimit()設置1所以下次Fragment到左側,並會留在正確的,應予以保留當前頁面

Default value兩側的頁面數記憶。

要調用next Fragment防止你需要的ViewPager對象0值設置爲OffscreenPageLimit

viewPager.setOffscreenPageLimit(0); 

編輯:

但我已經通過設置限制0檢查。

setOffscreenPageLimit(0)現在不起作用。當您設置限制0你可以看到下面的警告在LogCat

Requested offscreen page limit 0 too small; defaulting to 1 

所以,我建議你要麼叫setOffscreenPageLimit(2),將讓你的所有3個片段在內存中,否則不要ViewPager打電話setOffscreenPageLimit(int limit)

相關問題