Fragment 切换问题

    1. public void switchContent(Fragment fragment) {  
    2.        if(mContent != fragment) {  
    3.            mContent = fragment;  
    4.            mFragmentMan.beginTransaction()  
    5.                .setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out)  
    6.                .replace(R.id.content_frame, fragment) // 替换Fragment,实现切换  
    7.                .commit();  
    8.        }  
    9.    }  
    10. 每次切换时此个Fragmnet都会被实例化,这种方式使用时适合只做一次处理,永久性的替换。如果它的切换平率过高的话,不建议使用replace()忒费内存
    11. 建议使用:切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
      这样就能做到多个Fragment切换不重新实例化:

/*
* 设置Fragment选择
*/
private void setFragmentSelection(int index) {
ft = fm.beginTransaction();
initFragment(ft);  每次切换时都隐藏刚才显示的

switch (index) {
// 当选择的是私人的时候
case R.id.rb_personGroup:
if (fragment_Person == null) {
fragment_Person = new ULFragment_Person();
ft.add(R.id.userlist_fragement_main, fragment_Person);
} else {
// 重建view视图,附加到UI上并显示。
ft.show(fragment_Person);
}
break;
// 当选择的是共享组的时候
case R.id.rb_sharedGroup:
if (fragment_Shared == null) {
fragment_Shared = new ULFragment_Shared();
ft.add(R.id.userlist_fragement_main, fragment_Shared);
} else {
// 重建view视图,附加到UI上并显示。
ft.show(fragment_Shared);
}
break;

}
ft.commit();
}

/*
* 初始化Fragment 记性判断fragment是否隐藏。
*/
private void initFragment(FragmentTransaction ft2) {

if (fragment_Person != null) {
// 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
ft2.hide(fragment_Person);
}
if (fragment_Shared != null) {
ft2.hide(fragment_Shared);
}
}

原文地址:https://www.cnblogs.com/jeno-song/p/5058997.html