zoukankan      html  css  js  c++  java
  • 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;
        }
    }
     
  • 相关阅读:
    pat03-树1. 二分法求多项式单根(20)
    pat05-图1. List Components (25)
    pat06-图4. Saving James Bond
    pat05-图3. 六度空间 (30)
    pat05-图2. Saving James Bond
    pat04-树9. Path in a Heap (25)
    pat04-树8. Complete Binary Search Tree (30)
    pat04-树7. Search in a Binary Search Tree (25)
    pat04-树5. File Transfer (25)
    Two Sum
  • 原文地址:https://www.cnblogs.com/wenhui92/p/6242447.html
Copyright © 2011-2022 走看看