Fragment 重疊 遮蓋問題,fragment遮蓋

來源:互聯網
上載者:User

Fragment 重疊 遮蓋問題,fragment遮蓋

1.導致Fragment 重疊 和遮蓋的原因 

主要還是因為Fragment的狀態儲存機制,當系統記憶體不足時,Fragment的主Activity被回收,Fragment的執行個體並沒有隨之被回收。

Activity被系統回收時,會主動調用onSaveInstance()方法來儲存視圖層(View Hierarchy),所以當Activity通過導航再次被重建時,之前被執行個體化過的Fragment依然會出現在Activity中,然而從上述代碼中可以明顯看出,再次重建了新的Fragment,綜上這些因素導致了多個Fragment重疊在一起。

2.如果這個問題不是必現問題 ,調試的時候 可以將  開發人員選項中的  “不保留活動” 開啟 ,為了 類比 Activity 被及時回收。

3.onSaveInstanceState()與onRestoreInstanceState()這兩個方法。

原本以為只有在系統因為記憶體回收Activity時才會調用的onSaveInstanceState(),居然在轉跳到其他Activity、開啟多任務視窗、使用Home回到主畫面這些操作中也被調用,然而onRestoreInstanceState()並沒有在再次回到Activity時被調用。而且我在onResume()發現之前的Fragment只是被移除,並不是空,所以就算你在onResume()中執行問題一中建立的Fragment的方法,同樣無濟於事。所以通過remove()宣告失敗。

接著通過調查資料發現Activity中的onSaveInstanceState()裡面有一句super.onRestoreInstanceState(savedInstanceState),Google對於這句話的解釋是“Always call the superclass so it can save the view hierarchy state”,大概意思是“總是執行這句代碼來調用父類去儲存視圖層的狀態”。其實到這裡大家也就明白了,就是因為這句話導致了重影的出現,於是我刪除了這句話,然後onCreate()與onRestoreInstanceState()中同時使用問題一中的建立Fragment方法,然後再通過儲存切換的狀態,發現結果非常完美。

//記錄Fragment的位置      private int position = 0;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_index);            setTabSelection(position);      }        @Override      protected void onRestoreInstanceState(Bundle savedInstanceState) {          position = savedInstanceState.getInt("position");          setTabSelection(position);          super.onRestoreInstanceState(savedInstanceState);      }        @Override      protected void onSaveInstanceState(Bundle outState) {          //記錄當前的position          outState.putInt("position", position);      }  

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.