最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年01月06日 09:33:16   作者:孟祥超  
這篇文章主要介紹了Android中ViewPager獲取當(dāng)前顯示的Fragment的兩種方法,一種是使用 getSupportFragmentManager().findFragmentByTag()方法,另一種是重寫適配器的 setPrimaryItem()方法,有需要的朋友可以參考借鑒,下面來一起看看吧。

前言

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

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

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

下面看看這個(gè)過程

新創(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的組成;四部分

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

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

//Viewpager + FragmentPagerAdapter 情況下 獲取 當(dāng)前顯示的Fragment,只能找已經(jīng)加載過的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é)

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

相關(guān)文章

  • Android 中構(gòu)建快速可靠的 UI 測試

    Android 中構(gòu)建快速可靠的 UI 測試

    本文主要介紹Android 中構(gòu)建快速可靠的 UI 測試,這里整理了相關(guān)資料及相關(guān)代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能

    Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)后臺(tái)開啟服務(wù)默默拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android studio 使用Debugger問題(代碼中含有ndk)

    Android studio 使用Debugger問題(代碼中含有ndk)

    這篇文章主要介紹了Android studio 使用Debugger問題(代碼中含有ndk),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Ubuntu中為Android簡單介紹硬件抽象層(HAL)

    Ubuntu中為Android簡單介紹硬件抽象層(HAL)

    本文主要介紹在Android 的硬件抽象層,學(xué)習(xí)Android 硬件抽象層(HAL)對(duì)理解整個(gè)Android都是有非常大的作用,有興趣的小伙伴可以參考下
    2016-08-08
  • Android中startService基本使用方法概述

    Android中startService基本使用方法概述

    這篇文章主要介紹了Android中startService基本使用方法,詳細(xì)解釋了startService的基本使用概述及其生命周期,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Android中標(biāo)簽容器控件的實(shí)例詳解

    Android中標(biāo)簽容器控件的實(shí)例詳解

    在Android開發(fā)過程中,常常會(huì)遇到這樣的場景:我們展示一種物品或者為某一事物添加一些標(biāo)簽。比如說,我們買一件衣服,可以有以下幾種標(biāo)簽:杰克瓊斯,男士,運(yùn)動(dòng)等等。本文將實(shí)例介紹Android中標(biāo)簽容器控件的實(shí)現(xiàn)過程。
    2016-07-07
  • Android圖片處理實(shí)例分析

    Android圖片處理實(shí)例分析

    這篇文章主要介紹了Android圖片處理的方法,結(jié)合實(shí)例形式分析了Android針對(duì)圖片的加載、分割、縮放、繪制等操作技巧,需要的朋友可以參考下
    2016-08-08
  • Flutter在項(xiàng)目中使用動(dòng)畫不使用包實(shí)現(xiàn)詳解

    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ǔ)詳解

    Android SharedPreferences數(shù)據(jù)存儲(chǔ)詳解

    SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出
    2022-11-11
  • 實(shí)例詳解用戶輸入 i. 檢測常用手勢(shì)

    實(shí)例詳解用戶輸入 i. 檢測常用手勢(shì)

    通過本段代碼給大家介紹當(dāng)用戶輸入i檢測常用手勢(shì)的相關(guān)內(nèi)容,代碼簡單易懂,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01

最新評(píng)論

博湖县| 奉化市| 田东县| 望奎县| 浦城县| 绥芬河市| 廉江市| 上林县| 合川市| 当雄县| 嘉峪关市| 新营市| 荣昌县| 平和县| 清河县| 库尔勒市| 深水埗区| 德令哈市| 凤山县| 盖州市| 泾阳县| 贵阳市| 醴陵市| 吉林省| 宜良县| 明溪县| 吴忠市| 桐乡市| 贵德县| 绩溪县| 敦煌市| 沂水县| 二手房| 古丈县| 应用必备| 桑日县| 广元市| 连南| 大英县| 康保县| 濉溪县|