Android中ViewPager獲取當(dāng)前顯示的Fragment
前言
在項(xiàng)目中,有時(shí)會(huì)用到在ViewPager中顯示同樣類型的Fragment,同時(shí)這樣的Fragment的個(gè)數(shù)是動(dòng)態(tài)的,但是PagerAdapter沒(méi)有給我們提供getCurrentFragment類似的方法。下面就給大家介紹下Android中ViewPager獲取當(dāng)前顯示的Fragment的方法,一起看看吧。
一、使用 getSupportFragmentManager().findFragmentByTag()方法
Viewpager + FragmentPagerAdapter 情況下 才好使; FragmentPagerAdapter 有一個(gè)特點(diǎn) 凡是加載過(guò)的Fragment 都會(huì)被保留,既然Fragment不會(huì)被銷毀,那我們就可以使用findFragmentByTag() 方法找到它;但問(wèn)題是動(dòng)態(tài)創(chuàng)建的話 tag的設(shè)置;我們知道動(dòng)態(tài)加載時(shí)是可以設(shè)置tag的,但是動(dòng)態(tài)創(chuàng)建就沒(méi)法設(shè)置了;如果viewpager使用的是適配器是 FragmentPagerAdapter 的話 ,F(xiàn)ragment就會(huì)被設(shè)置上tag 根據(jù)這個(gè)tag 我們就可以獲取到當(dāng)前顯示的fragment了;
下面看看這個(gè)過(guò)程
新創(chuàng)建時(shí) tag ==null
@Override
public Fragment getItem(int position) {
PageTab pageTab = tabs.get(position);
TabFragment tab = new TabFragment();
Log.e(TAG,"====getItem===新創(chuàng)建時(shí)的tag:=="+tab.getTag());
tab.getArguments().putSerializable("tab",pageTab);
//取出數(shù)據(jù) 新建Fragment
return tab;
}
Log 查看 tag 時(shí)為 null
E/FileListPagerAdapter: ====getItem===新創(chuàng)建時(shí)的tag:==null
將 適配器設(shè)置給Viewpager后 的tag
E/MainActivity: ==findCurrentFragment==pagerId:2131492976 E/MainActivity: ==findCurrentFragment==currentItem:0 E/MainActivity: =======findCurrentFragment=========完整Tag===android:switcher:2131492976:0 E/MainActivity: =======findCurrentFragment=========當(dāng)前顯示的Fragment 的tag===:android:switcher:2131492976:0
可以看到 tag的組成;四部分
- android : 固定部分
- switcher : 固定部分
- 2131492976 : ViewPager 的id
- 0 : ViewPager 當(dāng)前顯示的itemPostion
既然FragmentPagerAdapter的特點(diǎn)是保存fragment狀態(tài)。 就可以利用這個(gè)特點(diǎn)通過(guò) findFragmentByTag() 找到這個(gè)Fragment
//Viewpager + FragmentPagerAdapter 情況下 獲取 當(dāng)前顯示的Fragment,只能找已經(jīng)加載過(guò)的Fragment
Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());
二、重寫適配器的 setPrimaryItem()方法 ;
這個(gè)方法在每次viewpager滑動(dòng)后都會(huì)被調(diào)用 而 object參數(shù)就是顯示的Fragment ;可以在適配器中定義個(gè)變量 currentFragment 每次改變時(shí)都會(huì)獲取到顯示的Fragment
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
currentFragment = (TabFragment) object;
super.setPrimaryItem(container, position, object);
}
這種方式有一個(gè)缺陷 setPrimaryItem()是在 viewpager的滑動(dòng)監(jiān)聽執(zhí)行完后才會(huì)調(diào)用的;所以在 換的個(gè)滑動(dòng)監(jiān)聽中獲取當(dāng)前顯示的Fragment 是不對(duì)的
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)各位Android開發(fā)者們能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
- android中ViewPager結(jié)合Fragment進(jìn)行無(wú)限滑動(dòng)
- Android中TabLayout+ViewPager 簡(jiǎn)單實(shí)現(xiàn)app底部Tab導(dǎo)航欄
- Android自定義ViewPagerIndicator實(shí)現(xiàn)炫酷導(dǎo)航欄指示器(ViewPager+Fragment)
- Android ViewPager實(shí)現(xiàn)輪播圖效果
- Android實(shí)現(xiàn)基于ViewPager的無(wú)限循環(huán)自動(dòng)播放帶指示器的輪播圖CarouselFigureView控件
- Android ViewPager加載圖片效果
- 詳解Android_性能優(yōu)化之ViewPager加載成百上千高清大圖oom解決方案
- Android實(shí)現(xiàn)Tab布局的4種方式(Fragment+TabPageIndicator+ViewPager)
- Android畫廊效果之ViewPager顯示多個(gè)圖片
- Android使用自定義PageTransformer實(shí)現(xiàn)個(gè)性的ViewPager動(dòng)畫切換效果
相關(guān)文章
Android 中構(gòu)建快速可靠的 UI 測(cè)試
本文主要介紹Android 中構(gòu)建快速可靠的 UI 測(cè)試,這里整理了相關(guān)資料及相關(guān)代碼,有興趣的小伙伴可以參考下2016-08-08
Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android studio 使用Debugger問(wèn)題(代碼中含有ndk)
這篇文章主要介紹了Android studio 使用Debugger問(wèn)題(代碼中含有ndk),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
Ubuntu中為Android簡(jiǎn)單介紹硬件抽象層(HAL)
本文主要介紹在Android 的硬件抽象層,學(xué)習(xí)Android 硬件抽象層(HAL)對(duì)理解整個(gè)Android都是有非常大的作用,有興趣的小伙伴可以參考下2016-08-08
Android中標(biāo)簽容器控件的實(shí)例詳解
在Android開發(fā)過(guò)程中,常常會(huì)遇到這樣的場(chǎng)景:我們展示一種物品或者為某一事物添加一些標(biāo)簽。比如說(shuō),我們買一件衣服,可以有以下幾種標(biāo)簽:杰克瓊斯,男士,運(yùn)動(dòng)等等。本文將實(shí)例介紹Android中標(biāo)簽容器控件的實(shí)現(xiàn)過(guò)程。2016-07-07
Flutter在項(xiàng)目中使用動(dòng)畫不使用包實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Flutter在項(xiàng)目中使用動(dòng)畫不使用包實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android SharedPreferences數(shù)據(jù)存儲(chǔ)詳解
SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來(lái)保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再?gòu)腟haredPreferences中將值取出2022-11-11
實(shí)例詳解用戶輸入 i. 檢測(cè)常用手勢(shì)
通過(guò)本段代碼給大家介紹當(dāng)用戶輸入i檢測(cè)常用手勢(shì)的相關(guān)內(nèi)容,代碼簡(jiǎn)單易懂,感興趣的朋友一起學(xué)習(xí)吧2016-01-01

