FragmentStateAdapter 引發(fā)的一連串問題

這個(gè)問題一直搜索相關(guān)資料沒發(fā)現(xiàn),后來還是自己瞎琢磨解決的析孽,主要問題還是沒仔細(xì)研究源碼弄清原理岳瞭。

在開始詳細(xì)講解之前火的,先幾句話概括下問題和解決方式

  • 在模擬自動(dòng)銷毀界面并恢復(fù)數(shù)據(jù)時(shí),F(xiàn)ragmentStateAdapter發(fā)現(xiàn)一直創(chuàng)建Fragment內(nèi)嵌的Fragment伶唯。
    解決方式:以標(biāo)簽形式創(chuàng)建內(nèi)嵌Fragment,在發(fā)現(xiàn)如果已經(jīng)存在標(biāo)簽的內(nèi)嵌Fragment的時(shí)候,便不再創(chuàng)建加入遭铺。
什么是內(nèi)嵌Fragment?

FragmentStateAdapter 本身以多個(gè)Fragment以Tab形式顯示恢准,然后這些Fragment里面再內(nèi)嵌Fragment,就是內(nèi)嵌Fragment了

為什么導(dǎo)致這個(gè)一直創(chuàng)建Fragment的問題魂挂?

因?yàn)镕ragmentStateAdapter已經(jīng)處理了保存View狀態(tài)、恢復(fù)View狀態(tài)馁筐,也包括恢復(fù)ChildFragment涂召。我們?cè)诨謴?fù)的時(shí)候,如果不做特殊處理敏沉,會(huì)再次運(yùn)行onViewCreated代碼再次創(chuàng)建ChildFragment

如何解決果正?

我們只要在創(chuàng)建ChildFragment的時(shí)候加入標(biāo)簽Fragment的判斷即可避免重復(fù)創(chuàng)建

        // 先通過標(biāo)簽形式查找
        val matissFragment = childFragmentManager.findFragmentByTag(MATISS_FRAGMENT_TAG)
        // 如果不存在,則重新創(chuàng)建并添加盟迟,如果已經(jīng)存在就不用處理了秋泳,因?yàn)镕ragmentStateAdapter已經(jīng)幫我們處理了
        matissFragment ?: let {
            val newMatissFragment = MatissFragment.newInstance(
                    arguments?.getInt(MatissFragment.ARGUMENTS_MARGIN_BOTTOM)
                            ?: 0
            )
            childFragmentManager.beginTransaction()
                    .add(R.id.fragmentContainerView, newMatissFragment, MATISS_FRAGMENT_TAG)
                    .commitAllowingStateLoss()
        }
題外話

有關(guān)數(shù)據(jù)的恢復(fù)等等,該用ViewModel或者用其他方式時(shí)候的實(shí)現(xiàn)還是要用的攒菠,這個(gè)更多的是恢復(fù)View方面

代碼例子

可以學(xué)習(xí)下面的源碼迫皱,內(nèi)嵌Fragment的形式顯示

一個(gè)非常豐富的開源庫,如果你需要相冊(cè)辖众、錄制卓起、錄音等操作,那么這個(gè)也許對(duì)你有一定的幫助:

zhongjhATC/AlbumCameraRecorder: ??一個(gè)高效的多媒體支持操作庫赵辕,可多方面的簡單配置操作相冊(cè)既绩、拍照、錄制还惠、錄音等功能饲握。也支持配套使用的展示圖片、視頻蚕键、音頻的九宮格功能救欧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锣光,隨后出現(xiàn)的幾起案子笆怠,更是在濱河造成了極大的恐慌,老刑警劉巖誊爹,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹬刷,死亡現(xiàn)場離奇詭異瓢捉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)办成,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門泡态,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迂卢,你說我怎么就攤上這事某弦。” “怎么了而克?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵靶壮,是天一觀的道長。 經(jīng)常有香客問我员萍,道長腾降,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任充活,我火速辦了婚禮蜂莉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘混卵。我一直安慰自己映穗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布幕随。 她就那樣靜靜地躺著蚁滋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赘淮。 梳的紋絲不亂的頭發(fā)上辕录,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音梢卸,去河邊找鬼走诞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛤高,可吹牛的內(nèi)容都是我干的蚣旱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼戴陡,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼塞绿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恤批,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤异吻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后喜庞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诀浪,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棋返,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笋妥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懊昨。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窄潭,死狀恐怖春宣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫉你,我是刑警寧澤月帝,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站幽污,受9級(jí)特大地震影響嚷辅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜距误,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一簸搞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧准潭,春花似錦趁俊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泼掠,卻和暖如春怔软,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背择镇。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工挡逼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腻豌。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓家坎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饲梭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乘盖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容