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;
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM