Android开发之多Fragment切换优化


前言:

有时候Activity里面或者大Fragment里面切换小fragment的时候,会出现卡顿现象,尤其是小fragment装载数据较多的时候。此时,对fragment切换处理也能优化切换的速度。

常用方法:

replace()
该方法只是在上一个Fragment不再需要时采用的简便方法
show() hide() add()
正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。

****看代码吧****

//不优化的做法
//每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量
public void switchFragment(Fragment targetFragment) {
    if (targetFragment == null)
      return;
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    //目标Fragment替换原来的Fragment
    transaction.replace(R.id.content, targetFragment);
    transaction.commit();
  }

//优化的做法
Fragment currentFragment;//这里currentfragment在下面方法可能会报空指针,请自行处理
private void switchFragment(Fragment targetFragment) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    if (!targetFragment.isAdded()) {
        transaction
                .hide(currentFragment)
                //add也是一种加载方式,并不是单纯的show
                .add(R.id.main_fragment, targetFragment)
                .commit();
        System.out.println("还没添加呢");
    } else {
        transaction
                .hide(currentFragment)
                //show出来
                .show(targetFragment)
                .commit();
        System.out.println("添加了( ⊙o⊙ )哇");
    }
    currentFragment = targetFragment;
}

****注意事项****

1. 上面的currentFragment在使用时需在方法里加逻辑判断,避免空指针。具体需要结合个人使用场景。

2. show出来的fragment在获取焦点时可能出现问题,而add出来的获取焦点没问题。也需要自己处理。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM