在項目中需要進行Fragment的切換,一直都是用replace()方法來替換Fragment
但是,這樣會有一個問題 ,應該很多朋友都遇到過:
每次切換的時候,Fragment都會重新實例化,也就是運行OnCreatVIew()方法
那么如何讓多個Fragment彼此切換時不重新實例化?
正確的切換方式是add(),切換時hide(),add()另一個Fragment,再次切換時,只需hide()當前,show()另一個。
//之前顯示的fragment
private Fragment mContent;
/** 修改顯示的內容 不會重新加載 **/
public void switchContent(Fragment to) {
if (mContent != to) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) { // 先判斷是否被add過
transaction.hide(mContent).add(R.id.content, to).commit(); // 隱藏當前的fragment,add下一個到Activity中
} else {
transaction.hide(mContent).show(to).commit(); // 隱藏當前的fragment,顯示下一個
}
mContent = to;
}
showContent();
}