Loading

Android使得Fragment 切换时不重新实例化

以前实现Fragment的切换都是用replace方法实现

public void startFragmentAdd(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.main_layout, fragment, fragment.getClass().getName())
        .commit();
}
 replace()方法只是在上一个Fragment不再需要时采用的简便方法。因此,每次切换的时候,Fragment都会重新实例化,重新加载数据。
如果要实现Fragment 切换时不重新实例化,正确的切换方式是add(),切换时hide()当前,add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
// fragment的切换
private void startFragmentAdd(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
         .beginTransaction();
    if (current_fragment == null) {
        fragmentTransaction.add(R.id.main_layout, fragment).commit();
        current_fragment = fragment;
    }
    if (current_fragment != fragment) {
        // 先判断是否被add过
        if (!fragment.isAdded()) {
            // 隐藏当前的fragment,add下一个到Activity中
            fragmentTransaction.hide(current_fragment)
                  .add(R.id.main_layout, fragment).commit();
        } else {
            // 隐藏当前的fragment,显示下一个
            fragmentTransaction.hide(current_fragment).show(fragment)
                  .commit();
        }
        current_fragment = fragment;
    }
}

 

 
posted @ 2017-01-02 14:41  辉灬  阅读(3243)  评论(0编辑  收藏  举报