精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

FragmentPagerAdapter和FragmentStatePagerAdapter的區別

移動開發 Android
FragmentPagerAdapter和FragmentStatePagerAdapter在Android開發中都是用于與ViewPager配合使用的適配器,而主要區別在于它們對Fragment生命周期的管理方式。

FragmentPagerAdapter和FragmentStatePagerAdapter在Android開發中都是用于給ViewPager進行數據適配的適配器,在使用和管理Fragment的方式上兩者存在顯著的區別。

FragmentPagerAdapter在切換Fragment時,不會銷毀Fragment,而只是調用事務中的detach方法。因此Fragment的視圖(view)會被銷毀,而Fragment的實例會保留在FragmentManager中。通過這種方式創建的Fragment一直不會被銷毀,適用于一些靜態的Fragment,例如一組tabs。這也可能導致在Fragment數量較大時,應用程序占用過多資源。

FragmentStatePagerAdapter在切換不同的Fragment時,會銷毀不再需要的Fragment。在銷毀Fragment前,會先將Fragment的狀態信息(通過onSaveInstanceState(Bundle)方法保存)保存在Bundle中。切換回原來的頁面后,保存的狀態可用于恢復生成新的Fragment。適用于頁面數量較大或需要動態加載和銷毀Fragment的場景,能有效地管理內存使用。

FragmentPagerAdapter源碼

@Override
public Object instantiateItem(ViewGroup container, int position) {
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }
    final long itemId = getItemId(position);
    // Do we already have this fragment?
    String name = makeFragmentName(container.getId(), itemId);
    Fragment fragment = mFragmentManager.findFragmentByTag(name);
    if (fragment != null) {
        if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
        mCurTransaction.attach(fragment);
    } else {
        fragment = getItem(position);
        if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
        mCurTransaction.add(container.getId(), fragment,
                makeFragmentName(container.getId(), itemId));
    }
    if (fragment != mCurrentPrimaryItem) {
        fragment.setMenuVisibility(false);
        fragment.setUserVisibleHint(false);
    }
    return fragment;
}

在instantiateItem方法中,主要是將Fragment添加到FragmentManager中。未添加到FragmentManager中的執行add操作,已添加到FragmentManager中的只進行attach操作。

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }
    if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object + " v=" + ((Fragment)object).getView());
    mCurTransaction.detach((Fragment)object);
}

在destroyItem方法中,只是進行detach操作。detach操作并不會將Fragment銷毀,Fragment依舊是由FragmentManager進行管理。

FragmentStatePagerAdapter源碼

 @Override
public Object instantiateItem(ViewGroup container, int position) {
    if (mFragments.size() > position) {
        Fragment f = mFragments.get(position);
        if (f != null) {
            return f;
        }
    }
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }
    Fragment fragment = getItem(position);
    if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
    if (mSavedState.size() > position) {
        Fragment.SavedState fss = mSavedState.get(position);
        if (fss != null) {
            fragment.setInitialSavedState(fss);
        }
    }
    while (mFragments.size() <= position) {
        mFragments.add(null);
    }
    fragment.setMenuVisibility(false);
    fragment.setUserVisibleHint(false);
@
    mFragments.set(position, fragment);
    mCurTransaction.add(container.getId(), fragment);
    return fragment;
}

FragmentStatePagerAdapter是通過一個mFragments數組來存儲Fragment的,通過mSavedState數組來存儲Fragment銷毀時的狀態,通過position獲取到的Fragment可能為空(被回收),如果為空,則會再次調用getItem方法重新創建新的Fragment,然后將mSavedState中存儲的狀態重新賦予這個新的Fragment, 達到Fragment恢復的效果。

 @Override
public void destroyItem(ViewGroup container, int position, Object object) {
    Fragment fragment = (Fragment) object;
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }
    if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object + " v=" + ((Fragment)object).getView());
    while (mSavedState.size() <= position) {
        mSavedState.add(null);
    }
    mSavedState.set(position, fragment.isAdded() ? mFragmentManager.saveFragmentInstanceState(fragment) : null);
    mFragments.set(position, null);
    mCurTransaction.remove(fragment);
}

當item在頁面中不可見時,該Fragment的狀態會先被保存到mSavedState中,而Fragment實例則會被銷毀。

總結

FragmentPagerAdapter和FragmentStatePagerAdapter在Android開發中都是用于與ViewPager配合使用的適配器。

相同點:

  • 繼承自PagerAdapter:都繼承自PagerAdapter,基本功能和用法一樣。
  • 管理Fragment:都是用來管理Fragment的適配器,使ViewPager能夠展示一系列的Fragment。
  • 保持當前和前后Fragment狀態:在顯示當前Fragment的同時,Adapter會提前初始化后一個Fragment,并把當前Fragment的前一個Fragment保存在內存中。

不同點:

(1) Fragment銷毀策略:

  • FragmentPagerAdapter:不會銷毀已經創建的Fragment實例,而是保存在內存中。當Fragment不再可見時,只會調用detach方法,銷毀Fragment的視圖(View),保留Fragment的實例。切換回之前的Fragment,可以快速重新綁定視圖,而不需要重新創建Fragment實例。這種方式適用于Fragment數量較少,且不需要頻繁創建和銷毀的場景。
  • FragmentStatePagerAdapter:在不再需要某個Fragment時完全銷毀。當Fragment滑出屏幕范圍后,實例和視圖都會被銷毀。切換回該Fragment時,會重新創建Fragment實例和視圖。這種方式適用于Fragment數量較多,或者需要動態加載和銷毀Fragment的場景,以避免占用過多內存。

(2) 狀態保存與恢復:

  • FragmentStatePagerAdapter:在銷毀Fragment之前,會在onSaveInstanceState(Bundle)方法中保存Fragment的狀態信息。切換回原來的Fragment時,可以使用這些保存的狀態信息來恢復Fragment的狀態。
  • FragmentPagerAdapter:由于不會銷毀Fragment實例,不需要在銷毀前保存狀態,也不需要在恢復時重新加載狀態。

FragmentPagerAdapter和FragmentStatePagerAdapter的主要區別在于它們對Fragment生命周期的管理方式。前者保留Fragment實例,適用于Fragment數量較少且不需要頻繁創建和銷毀的場景;后者在不再需要時銷毀Fragment,適用于Fragment數量較多或需要動態加載和銷毀的場景。

責任編輯:趙寧寧 來源: 沐雨花飛蝶
相關推薦

2021-08-04 08:33:59

TypeScriptConst Readonly

2011-06-08 11:02:14

GetPost

2018-11-14 09:46:33

DoSDDoS攻擊

2011-03-03 09:55:34

forwardredirect

2020-07-09 10:53:05

MPLSIP網絡

2010-07-30 14:09:30

FlexFlash

2020-08-12 23:21:49

平臺即服務PaaSaPaaS

2009-12-03 10:12:24

LinuxUnix

2018-09-20 16:10:48

CookiesSession前端

2010-08-12 15:30:27

FlexFlash

2019-01-14 15:44:11

CoinToken區塊鏈

2011-05-26 15:52:31

sleep()wait()

2015-09-23 10:00:47

OLTPOLAP

2009-07-06 15:34:56

JSP和Servlet

2011-09-05 17:44:49

LinuxUnix

2009-07-14 15:01:02

AWT和Swing

2009-09-01 10:14:16

samba

2016-11-03 19:10:02

Linux操作系統

2010-08-03 15:02:45

FlexPHP

2023-03-01 15:43:41

Entrypoint容器
點贊
收藏

51CTO技術棧公眾號

亚洲网址在线| 天堂久久午夜av| 粉嫩av一区二区三区在线播放| 欧美激情18p| 给我看免费高清在线观看| 少妇一区视频| 一区二区三区中文在线观看| 精品日本一区二区| 亚洲一区二区视频在线播放| 黄页网站一区| 永久免费看mv网站入口亚洲| 日本少妇一区二区三区| 成人福利视频| 亚洲视频 欧洲视频| 久久综合福利| 精品久久久无码中文字幕| 一本一本久久| 美女av一区二区| 中文字幕在线1| 国产精品乱战久久久| 欧美综合欧美视频| 成人免费视频91| 免费观看久久久久| 不卡av在线免费观看| 国产精品嫩草影院久久久| 日本三级理论片| 亚洲电影影音先锋| 尤物yw午夜国产精品视频明星| 欧美日韩一区二区区| 成人在线视频观看| 一本到不卡免费一区二区| 丁香婷婷综合激情| 天堂8中文在线| 中文一区二区完整视频在线观看| 国产在线一区二| 国产黄色美女视频| 麻豆国产91在线播放| 欧洲午夜精品久久久| 日本一区二区网站| 欧美日韩调教| 理论片在线不卡免费观看| 国产精品成人无码免费| 亚洲人挤奶视频| 亚洲国产精品久久久久秋霞不卡 | 欧美丰满老妇熟乱xxxxyyy| 国产精品xxx在线观看| 在线不卡a资源高清| 国产又大又黄又粗的视频| 成人性生交大片免费网站| 五月婷婷另类国产| 加勒比成人在线| 丁香花在线高清完整版视频| 一区二区三区日本| 波多野结衣与黑人| 污视频在线看网站| 一区二区国产视频| www.亚洲视频.com| 黄网av在线| 亚洲国产成人高清精品| 99久久免费观看| 97天天综合网| 精品久久久久久久久久ntr影视| 成人精品视频在线播放| 91九色美女在线视频| 欧美日韩另类字幕中文| 久久久久久久久久久久久国产精品 | 18视频在线观看娇喘| 超碰超碰在线| 亚洲国产裸拍裸体视频在线观看乱了| 777久久精品一区二区三区无码 | 国产91精品不卡视频| 国产精品男女视频| 日精品一区二区三区| 国产精品久久久久久久久影视| 中文字幕视频在线播放| 久草中文综合在线| www.久久草| 色视频免费在线观看| 国产日产欧美一区| 日韩第一页在线观看| 牛牛在线精品视频| 午夜影院在线观看欧美| 人妻无码视频一区二区三区| 国产福利亚洲| 欧美大胆一级视频| 九色porny自拍视频| 国产精品传媒精东影业在线| 精品自在线视频| 天天干天天干天天操| 蜜桃av一区二区三区电影| 99精品国产一区二区| 三区在线观看| 亚洲婷婷国产精品电影人久久| www.日本三级| 成人欧美大片| 日韩欧美在线一区二区三区| 素人fc2av清纯18岁| 欧美超碰在线| 97在线视频免费播放| 免费一级a毛片| 国产白丝精品91爽爽久久| 久久久久九九九| 黄色免费在线网站| 午夜电影久久久| 蜜桃免费在线视频| 精品国产18久久久久久洗澡| 国产亚洲美女久久| 国产亚洲第一页| 美国毛片一区二区| 国产精品久久久久久久免费大片 | 最近中文字幕av| 成人一区二区三区在线观看| 一区不卡视频| gay欧美网站| 精品久久国产字幕高潮| 婷婷丁香综合网| 久久高清国产| 国产精品视频免费一区| 中文字幕在线播放| 黑人巨大精品欧美一区二区一视频 | 97久久人人超碰caoprom| 欧美人动与zoxxxx乱| 好吊日免费视频| 亚洲国产精品第一区二区| 91精品视频大全| 日韩在线免费电影| 在线影院国内精品| 国产熟女高潮一区二区三区| 亚洲欧美偷拍自拍| 国产免费成人av| 久久久pmvav| 香蕉成人伊视频在线观看| 亚洲av无一区二区三区久久| 色999日韩| 国产精品久久久久久av| 国产视频网站在线| 色婷婷国产精品| 中文字幕第3页| 欧美a级在线| 91在线免费网站| 免费av网站在线观看| 日本国产一区二区| 国产精品探花一区二区在线观看| 狠狠噜噜久久| av一本久道久久波多野结衣| 在线观看的网站你懂的| 欧美一区午夜精品| 性色av无码久久一区二区三区| 久久国产精品第一页| 亚洲高清在线播放| 成人在线黄色| 色噜噜久久综合伊人一本| 精品乱码一区内射人妻无码| 国产精品视频免费看| 一区二区三区入口| 天天做天天爱天天爽综合网| 国产精品视频免费观看www| 三区四区在线视频| 91精品在线麻豆| 五月天丁香激情| 成人av在线网站| 精品国产一区三区| 午夜精品影视国产一区在线麻豆| 欧洲午夜精品久久久| 国产乱理伦片a级在线观看| 欧美在线观看一二区| 国产一二三四区在线| 看国产成人h片视频| 韩国黄色一级大片| 大伊香蕉精品在线品播放| 57pao成人永久免费视频| 国产一二三区在线视频| 欧美日本在线看| 老熟妇高潮一区二区三区| 国产69精品久久99不卡| 99999精品视频| 四季av一区二区三区免费观看| 91情侣偷在线精品国产| a'aaa级片在线观看| 亚洲日韩欧美视频| 国产尤物在线观看| 亚洲不卡在线观看| 无码人妻丰满熟妇啪啪欧美| 久久成人免费日本黄色| 日韩精品在线中文字幕| 国产精品入口久久| 18成人在线| 欧美gay囗交囗交| 久久躁日日躁aaaaxxxx| 网站黄在线观看| 欧美三区免费完整视频在线观看| 久久国产免费观看| 国产亚洲综合av| 午夜影院免费观看视频| 亚洲影院一区| 日本成人性视频| 西瓜成人精品人成网站| 国产日韩在线看片| 在线观看特色大片免费视频| 一区二区国产精品视频| 性生活黄色大片| 欧美在线观看你懂的| 九九热国产视频| 国产精品久久久久影院老司 | 国产拍欧美日韩视频二区| 亚洲国产午夜精品| 视频一区二区不卡| 国产精品一线二线三线| 成人一区不卡| 久久久久久久久四区三区| 精品视频在线播放一区二区三区| 欧美一级淫片播放口| 2024最新电影在线免费观看| 国产一区二区三区在线免费观看 | 日韩精品一区二区不卡| 国产精品成人免费| 成人免费毛片糖心| 白白色亚洲国产精品| 欧美一级小视频| 日本不卡在线视频| 久久人妻精品白浆国产| 国产欧美精品| 国产无限制自拍| 欧美成人日本| 一区二区三区观看| 欧美精品色图| 久久综合久久久| 加勒比久久高清| 亚洲一区二区免费| 日本在线中文字幕一区二区三区| 国产69精品久久久久99| 亚洲91av| 美女av一区二区三区 | 成人免费小视频| 性少妇xx生活| 亚洲国产精品精华液2区45| www.av欧美| 91欧美激情一区二区三区成人| 日本一区二区在线观看视频| 国产成人精品亚洲午夜麻豆| 涩多多在线观看| 激情久久五月天| 国产xxxxhd| 国产精品亚洲一区二区三区在线 | 成人在线观看www| 婷婷综合激情| 国产三级中文字幕| 99久久精品网站| 在线观看免费黄色片| 欧美freesex交免费视频| 手机在线视频你懂的| 99久久久久| 97精品国产97久久久久久粉红| 99国产**精品****| 女同性恋一区二区| 欧美午夜不卡影院在线观看完整版免费| 丰满女人性猛交| 在线中文一区| 国产 日韩 欧美在线| 99精品免费| 可以在线看的黄色网址| 日韩精品一卡二卡三卡四卡无卡| www.天天射.com| 极品少妇xxxx精品少妇| 中文字幕亚洲日本| 99精品国产视频| 在线观看国产精品一区| 国产精品久久国产精麻豆99网站| 无码黑人精品一区二区| 亚洲一级不卡视频| 亚洲欧美精品一区二区三区| 色哟哟日韩精品| 国产精品国产一区二区三区四区| 日韩一区二区麻豆国产| 日批视频在线播放| 亚洲午夜久久久久久久| 国产视频中文字幕在线观看| 欧美精品电影在线| 成人va天堂| 亚洲bt天天射| 四虎5151久久欧美毛片| 亚洲春色在线视频| 国产尤物精品| 成年人在线看片| 国产综合色在线视频区| 黄色性视频网站| 国产目拍亚洲精品99久久精品| 久久精品亚洲a| 精品国产福利在线| 91精品视频免费在线观看| 精品成人在线观看| 成人不用播放器| 欧美精品激情在线| 欧美在线va视频| 国产欧美日韩亚洲| 色婷婷一区二区三区| 男女猛烈激情xx00免费视频| 秋霞电影网一区二区| 无码人妻精品一区二区三| 国产欧美日韩在线观看| 亚洲精品在线观看av| 欧美日韩一区不卡| 欧美一区二区三区黄片| 日韩一中文字幕| 一区二区三区电影大全| 91原创国产| 久久一区二区三区喷水| 男人天堂1024| 国产99久久久久久免费看农村| 日韩精品无码一区二区三区久久久| 亚洲精品视频在线看| 中文字幕免费视频观看| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 极品销魂美女一区二区三区| 免费毛片视频网站| 亚洲成人一二三| www.久久久久久| 俺去了亚洲欧美日韩| 日韩福利一区| 久久99久久精品国产| 欧美日一区二区三区在线观看国产免| 日本男人操女人| 91麻豆精品秘密| 久久久久久久久99| 91精品欧美一区二区三区综合在| 国产一区二区三区福利| 2019最新中文字幕| 青青草原在线亚洲| 青青青在线视频播放| 国产精品一级二级三级| 中文字幕人妻一区二| 欧美麻豆精品久久久久久| 成a人v在线播放| 国产成人aa精品一区在线播放| 欧美freesex8一10精品| 99久久免费观看| 国产成人超碰人人澡人人澡| 亚洲波多野结衣| 欧美精品vⅰdeose4hd| 在线看的av网站| 国产精品视频一区二区高潮| 欧美久久精品一级c片| 国产天堂在线播放| 国产欧美va欧美不卡在线| 黄色av一级片| 亚洲性生活视频在线观看| 日韩pacopacomama| 日本三级中国三级99人妇网站| 日韩国产欧美在线观看| 亚洲自拍偷拍图| 欧美色涩在线第一页| 91.xxx.高清在线| 91久久在线视频| 黑丝一区二区三区| 男女一区二区三区| 精品久久中文字幕久久av| 日韩av资源| 国产精品视频地址| 中文精品久久| 国产在线不卡av| 欧美性猛交xxxx免费看| 成人在线观看网站| 成人精品久久久| 国产一区日韩欧美| 北岛玲一区二区| 在线精品视频小说1| 色综合久久久久综合一本到桃花网| 国产在线观看91精品一区| 欧美 日韩 国产一区二区在线视频 | 亚洲激情视频在线| 男人最爱成人网| 在线成人性视频| 岛国av在线一区| www.com亚洲| 日韩一区二区在线视频| 中文字幕亚洲在线观看| 国产精品亚洲αv天堂无码| 国产精品素人一区二区| av网站免费播放| 欧美有码在线视频| 午夜国产一区二区| 三级视频网站在线观看| 欧美主播一区二区三区美女| а天堂中文在线官网| 久久久久国产精品视频| 免费精品99久久国产综合精品| 麻豆亚洲av成人无码久久精品| 亚洲老头同性xxxxx| 二区三区精品| 狠狠爱免费视频| 亚洲欧美日韩久久| 日本ー区在线视频| 亚洲自拍偷拍色片视频| 亚洲狼人精品一区二区三区| 小嫩苞一区二区三区| 亚洲国产精品免费| 亚洲日韩中文字幕一区| 欧美在线观看成人| 亚洲美女视频在线观看| 黄色美女网站在线观看|