1. 程式人生 > >Fragment 重疊問題的原因及解決辦法

Fragment 重疊問題的原因及解決辦法

    今天還是講解Fragment, Fragment是每一個APP必不可少的東西,他的坑也很多,所以今天就為程式設計師們說一下Fragment重疊問題的坑。

   很多人都使用過Fragment,簡單的使用是最基本的。可是什麼是Fragment重疊是什麼?

  說一個應用場景:在一個activity中有四個Fragment,當我們在切換其他activity時,在別的app停留太長時間時,回到這個Activity中;

就會出現Fragment重疊;

   重疊的原因是什麼?

當系統記憶體不足,Fragment的宿主activity回收的時候,但是Fragment並沒有被回收,activity被系統回收時會呼叫onSaveInstanceState()方法儲存狀態,此時的FragmentTransaction中的相當於再次add()了Fragment進去,hide()和show()方法對之前儲存的Fragment已經失效,所以就出現了重疊 總結原因可以分為三點: 1.系統記憶體不足 activity被回收 2.重寫onSaveInstanceState()儲存狀態 3,fragment 狀態會是預設show() 造成fragment重疊
解決辦法是什麼? 在fragment基類中 把狀態進行儲存 通過儲存的狀態 fragment子類會進行相應的顯示隱藏 以下是程式碼: public
class BaseFragment extends Fragment {
privatestaticfinal String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
@Override
publicvoid onCreate(@Nullable Bundle savedInstanceState) {
. ..
if (savedInstanceState != null) {
boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);
FragmentTransaction ft = getFragmentManager().beginTransaction();
if (isSupportHidden) {
ft.hide(this);
} else {
ft.show(this);
}
ft.commit();
}
@Override
publicvoid onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); } } 以上是解決的辦法,但是解決的辦法不是唯一的,我們可以根據造成Fragment重疊的原因,做相對的處理, 本次只是提供一種解決辦法;