今天還是講解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 {
private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
@Override
public void 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
public void onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); } }
以上是解決的辦法,但是解決的辦法不是唯一的,我們可以根據造成Fragment重疊的原因,做相對的處理, 本次隻是提供一種解決辦法;