日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activity + Fragment 页面重叠问题

發(fā)布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activity + Fragment 页面重叠问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Activity + Fragment 頁面重疊問題

今天在遇到一個很奇怪的問題,我們的軟件是用Activity + Fragment構(gòu)成,在某些場景下,居然發(fā)現(xiàn)了有Fragment重疊的現(xiàn)象,究其本質(zhì),是因為原來未被銷毀,而又新建了一個Fragment,那么這種情況怎么避免呢。

一、 造成問題的原因

根本原因:Activity被銷毀并重新創(chuàng)建了,但已經(jīng)加載過的Fragmen被保存了下來,這時Activity重新創(chuàng)建時又產(chǎn)生了新的Fragment,所以重疊了。

問題場景:

  • 橫豎屏切換
  • 報錯之后恢復(fù)頁面
  • 內(nèi)存不足時Activity銷毀
  • 深入探究為什么橫豎屏后會產(chǎn)生這個現(xiàn)象呢?

    我在網(wǎng)上找到贊同的解釋:
    當(dāng)我們旋轉(zhuǎn)屏幕的時候,activity會被銷毀并重新創(chuàng)建,并且在銷毀之前執(zhí)行了onSaveInstanceState(Bundle outState)這個方法。這個方法會保存activity的一些信息,其中就包括添加過的fragment,當(dāng)activity被重新創(chuàng)建時,會初始化其中的變量,這個時候點擊底部導(dǎo)航的話會重新去添加fragment,也就導(dǎo)致了重疊的問題。

    二、 解決方法

    為了模擬這一場景,可在手機(jī) 開發(fā)者選項-> 應(yīng)用->不保留活動 模擬場景。

    解決方式一:
    在Activity回收時不保存狀態(tài),這樣當(dāng)Activity銷毀時再進(jìn)入時,就重新加載視圖

    @Overrideprotected void onSaveInstanceState(Bundle outState) {// super.onSaveInstanceState(outState);}

    解決方式二:

  • 新建Fragment的集合,初始化時加載Fragment
  • 在顯示Fragment時,為每一個Fragment添加一個tag
  • 后在Activity的onCreate中從Bundle中取出,并在集合中替換相應(yīng)的Fragment
  • 顯示Fragment時將其它的隱藏
  • 如果想記錄保存前的Fragment索引
  • private void showFragment(int position) {mCurrentFragPosition = position;} @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("position", mCurrentFragPosition);} @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (savedInstanceState != null) {mCurrentFragPosition = savedInstanceState.getInt("position");// 恢復(fù)崩潰之前fragment所對應(yīng)的positionFragment fragment = mFragmentManager.findFragmentByTag("" + mCurrentFragPosition);if (fragment != null)mFragments[mCurrentFragPosition] = fragment;}}

    總結(jié)

    以上是生活随笔為你收集整理的Activity + Fragment 页面重叠问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。