編輯:關於Android編程
前言
在項目中,有時會用到在ViewPager中顯示同樣類型的Fragment,同時這樣的Fragment的個數是動態的,但是PagerAdapter沒有給我們提供getCurrentFragment類似的方法。下面就給大家介紹下Android中ViewPager獲取當前顯示的Fragment的方法,一起看看吧。
一、使用 getSupportFragmentManager().findFragmentByTag()方法
Viewpager + FragmentPagerAdapter 情況下 才好使; FragmentPagerAdapter 有一個特點 凡是加載過的Fragment 都會被保留,既然Fragment不會被銷毀,那我們就可以使用findFragmentByTag()
方法找到它;但問題是動態創建的話 tag的設置;我們知道動態加載時是可以設置tag的,但是動態創建就沒法設置了;如果viewpager使用的是適配器是 FragmentPagerAdapter 的話 ,Fragment就會被設置上tag 根據這個tag 我們就可以獲取到當前顯示的fragment了;
下面看看這個過程
新創建時 tag ==null
@Override public Fragment getItem(int position) { PageTab pageTab = tabs.get(position); TabFragment tab = new TabFragment(); Log.e(TAG,"====getItem===新創建時的tag:=="+tab.getTag()); tab.getArguments().putSerializable("tab",pageTab); //取出數據 新建Fragment return tab; }
Log 查看 tag 時為 null
E/FileListPagerAdapter: ====getItem===新創建時的tag:==null
將 適配器設置給Viewpager後 的tag
E/MainActivity: ==findCurrentFragment==pagerId:2131492976 E/MainActivity: ==findCurrentFragment==currentItem:0 E/MainActivity: =======findCurrentFragment=========完整Tag===android:switcher:2131492976:0 E/MainActivity: =======findCurrentFragment=========當前顯示的Fragment 的tag===:android:switcher:2131492976:0
可以看到 tag的組成;四部分
既然FragmentPagerAdapter的特點是保存fragment狀態。 就可以利用這個特點通過 findFragmentByTag()
找到這個Fragment
//Viewpager + FragmentPagerAdapter 情況下 獲取 當前顯示的Fragment,只能找已經加載過的Fragment Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());
二、重寫適配器的 setPrimaryItem()方法 ;
這個方法在每次viewpager滑動後都會被調用 而 object參數就是顯示的Fragment ;可以在適配器中定義個變量 currentFragment 每次改變時都會獲取到顯示的Fragment
@Override public void setPrimaryItem(ViewGroup container, int position, Object object) { currentFragment = (TabFragment) object; super.setPrimaryItem(container, position, object); }
這種方式有一個缺陷 setPrimaryItem()
是在 viewpager的滑動監聽執行完後才會調用的;所以在 換的個滑動監聽中獲取當前顯示的Fragment 是不對的
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能帶來一定的幫助,如果有疑問大家可以留言交流。
我們知道,在Android系統中,同一時刻,只有一個Activity窗口是激活的,但是,對於WindowManagerService服務來說,這並不意味著它每次只需要管理
學習章節:第一章 Activity的生命周期和啟動模式學習內容:1正常情況下Activity的生命周期分析先上一張經典圖片鎮樓:測試正常情況Activity生命周期的代碼
以前做項目大多用的radiobutton,今天用tablayout來做一個tab切換頁面的的效果.實現的效果就是類似QQ.微信的頁面間(也就是Fragment間)的切換.
在android應用的開發過程中,經常會出現啟動一個界面後填寫部分內容後帶著數據返回啟動前的界面,最典型的應用就是登錄過程。在很多應用程序的模塊中,都有“我的”這個模塊,