国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中ViewPager獲取當(dāng)前顯示的Fragment

2019-12-12 04:06:39
字體:
供稿:網(wǎng)友

前言

在項目中,有時會用到在ViewPager中顯示同樣類型的Fragment,同時這樣的Fragment的個數(shù)是動態(tài)的,但是PagerAdapter沒有給我們提供getCurrentFragment類似的方法。下面就給大家介紹下Android中ViewPager獲取當(dāng)前顯示的Fragment的方法,一起看看吧。

一、使用 getSupportFragmentManager().findFragmentByTag()方法

Viewpager + FragmentPagerAdapter 情況下 才好使; FragmentPagerAdapter 有一個特點 凡是加載過的Fragment 都會被保留,既然Fragment不會被銷毀,那我們就可以使用findFragmentByTag() 方法找到它;但問題是動態(tài)創(chuàng)建的話 tag的設(shè)置;我們知道動態(tài)加載時是可以設(shè)置tag的,但是動態(tài)創(chuàng)建就沒法設(shè)置了;如果viewpager使用的是適配器是 FragmentPagerAdapter 的話 ,F(xiàn)ragment就會被設(shè)置上tag 根據(jù)這個tag 我們就可以獲取到當(dāng)前顯示的fragment了;

下面看看這個過程

新創(chuàng)建時 tag ==null

@Overridepublic 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

將 適配器設(shè)置給Viewpager后 的tag

E/MainActivity: ==findCurrentFragment==pagerId:2131492976E/MainActivity: ==findCurrentFragment==currentItem:0E/MainActivity: =======findCurrentFragment=========完整Tag===android:switcher:2131492976:0E/MainActivity: =======findCurrentFragment=========當(dāng)前顯示的Fragment 的tag===:android:switcher:2131492976:0

可以看到 tag的組成;四部分

  1. android :      固定部分
  2. switcher :      固定部分
  3. 2131492976 :      ViewPager 的id
  4. 0 :      ViewPager 當(dāng)前顯示的itemPostion

既然FragmentPagerAdapter的特點是保存fragment狀態(tài)。 就可以利用這個特點通過 findFragmentByTag() 找到這個Fragment

//Viewpager + FragmentPagerAdapter 情況下 獲取 當(dāng)前顯示的Fragment,只能找已經(jīng)加載過的FragmentFragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());

二、重寫適配器的 setPrimaryItem()方法 ;

這個方法在每次viewpager滑動后都會被調(diào)用 而 object參數(shù)就是顯示的Fragment ;可以在適配器中定義個變量 currentFragment 每次改變時都會獲取到顯示的Fragment

@Overridepublic 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)聽中獲取當(dāng)前顯示的Fragment 是不對的

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位Android開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄平县| 专栏| 嵩明县| 韶关市| 多伦县| 辉南县| 海口市| 梨树县| 黄大仙区| 乐至县| 鄂尔多斯市| 巴彦县| 交城县| 景德镇市| 大姚县| 惠东县| 且末县| 宜丰县| 靖边县| 类乌齐县| 尉氏县| 安顺市| 西宁市| 城口县| 年辖:市辖区| 太白县| 永州市| 绥阳县| 常州市| 教育| 桂东县| 达尔| 阳高县| 长宁区| 石景山区| 塔城市| 涟源市| 邹城市| 永年县| 文山县| 文化|