Android中ViewPager獲取當前顯示的Fragment
前言
在項目中,有時會用到在ViewPager中顯示同樣類型的Fragment,同時這樣的Fragment的個數(shù)是動態(tài)的,但是PagerAdapter沒有給我們提供getCurrentFragment類似的方法。下面就給大家介紹下Android中ViewPager獲取當前顯示的Fragment的方法,一起看看吧。
一、使用 getSupportFragmentManager().findFragmentByTag()方法
Viewpager + FragmentPagerAdapter 情況下 才好使; FragmentPagerAdapter 有一個特點 凡是加載過的Fragment 都會被保留,既然Fragment不會被銷毀,那我們就可以使用findFragmentByTag()
方法找到它;但問題是動態(tài)創(chuàng)建的話 tag的設置;我們知道動態(tài)加載時是可以設置tag的,但是動態(tài)創(chuàng)建就沒法設置了;如果viewpager使用的是適配器是 FragmentPagerAdapter 的話 ,F(xiàn)ragment就會被設置上tag 根據(jù)這個tag 我們就可以獲取到當前顯示的fragment了;
下面看看這個過程
新創(chuàng)建時 tag ==null
@Override public Fragment getItem(int position) { PageTab pageTab = tabs.get(position); TabFragment tab = new TabFragment(); Log.e(TAG,"====getItem===新創(chuàng)建時的tag:=="+tab.getTag()); tab.getArguments().putSerializable("tab",pageTab); //取出數(shù)據(jù) 新建Fragment return tab; }
Log 查看 tag 時為 null
E/FileListPagerAdapter: ====getItem===新創(chuàng)建時的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的組成;四部分
- android : 固定部分
- switcher : 固定部分
- 2131492976 : ViewPager 的id
- 0 : ViewPager 當前顯示的itemPostion
既然FragmentPagerAdapter的特點是保存fragment狀態(tài)。 就可以利用這個特點通過 findFragmentByTag()
找到這個Fragment
//Viewpager + FragmentPagerAdapter 情況下 獲取 當前顯示的Fragment,只能找已經(jīng)加載過的Fragment Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());
二、重寫適配器的 setPrimaryItem()方法 ;
這個方法在每次viewpager滑動后都會被調(diào)用 而 object參數(shù)就是顯示的Fragment ;可以在適配器中定義個變量 currentFragment 每次改變時都會獲取到顯示的Fragment
@Override public void setPrimaryItem(ViewGroup container, int position, Object object) { currentFragment = (TabFragment) object; super.setPrimaryItem(container, position, object); }
這種方式有一個缺陷 setPrimaryItem()
是在 viewpager的滑動監(jiān)聽執(zhí)行完后才會調(diào)用的;所以在 換的個滑動監(jiān)聽中獲取當前顯示的Fragment 是不對的
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位Android開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流。
- android中ViewPager結(jié)合Fragment進行無限滑動
- Android中TabLayout+ViewPager 簡單實現(xiàn)app底部Tab導航欄
- Android自定義ViewPagerIndicator實現(xiàn)炫酷導航欄指示器(ViewPager+Fragment)
- Android ViewPager實現(xiàn)輪播圖效果
- Android實現(xiàn)基于ViewPager的無限循環(huán)自動播放帶指示器的輪播圖CarouselFigureView控件
- Android ViewPager加載圖片效果
- 詳解Android_性能優(yōu)化之ViewPager加載成百上千高清大圖oom解決方案
- Android實現(xiàn)Tab布局的4種方式(Fragment+TabPageIndicator+ViewPager)
- Android畫廊效果之ViewPager顯示多個圖片
- Android使用自定義PageTransformer實現(xiàn)個性的ViewPager動畫切換效果
相關(guān)文章
Android實現(xiàn)網(wǎng)易新聞客戶端側(cè)滑菜單(1)
這篇文章主要為大家詳細介紹了Android實現(xiàn)網(wǎng)易新聞客戶端側(cè)滑菜單第一篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android Handler 機制實現(xiàn)原理分析
本文主要介紹 Android Handle機制實現(xiàn)的原理,這里整理了詳細的關(guān)于Handler的資料以及工作流程和實際應用,有興趣的小伙伴可以參考下2016-08-08Android 中FloatingActionButton(懸浮按鈕)實例詳解
這篇文章主要介紹了Android 中FloatingActionButton(懸浮按鈕)實例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05Android?配合Mat工具監(jiān)聽查找內(nèi)存泄漏的操作方法
這篇文章主要介紹了Android?配合Mat工具監(jiān)聽查找內(nèi)存泄漏問題,使用Android Studio Profiler查看內(nèi)存的操作,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下2022-05-05Android自定義View實現(xiàn)葉子飄動旋轉(zhuǎn)效果(四)
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)葉子飄動旋轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03Android studio 實現(xiàn)手機掃描二維碼功能
這篇文章主要介紹了Android studio 實現(xiàn)手機掃描二維碼功能,需要的朋友可以參考下2019-10-10