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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activity + Fragment 页面重叠问题

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

Activity + Fragment 頁面重疊問題

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

一、 造成問題的原因

根本原因:Activity被銷毀并重新創建了,但已經加載過的Fragmen被保存了下來,這時Activity重新創建時又產生了新的Fragment,所以重疊了。

問題場景:

  • 橫豎屏切換
  • 報錯之后恢復頁面
  • 內存不足時Activity銷毀
  • 深入探究為什么橫豎屏后會產生這個現象呢?

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

    二、 解決方法

    為了模擬這一場景,可在手機 開發者選項-> 應用->不保留活動 模擬場景。

    解決方式一:
    在Activity回收時不保存狀態,這樣當Activity銷毀時再進入時,就重新加載視圖

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

    解決方式二:

  • 新建Fragment的集合,初始化時加載Fragment
  • 在顯示Fragment時,為每一個Fragment添加一個tag
  • 后在Activity的onCreate中從Bundle中取出,并在集合中替換相應的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");// 恢復崩潰之前fragment所對應的positionFragment fragment = mFragmentManager.findFragmentByTag("" + mCurrentFragPosition);if (fragment != null)mFragments[mCurrentFragPosition] = fragment;}}

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。