zoukankan      html  css  js  c++  java
  • 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出来的获取焦点没问题。也需要自己处理。

  • 相关阅读:
    java实现 n人过桥问题
    git:rebase的原理
    注解@ConfigurationProperties使用方法
    docker+mysql 更改配置后重启不了的解决方案
    docker+mysql 构建数据库的主从复制
    Linux 踩坑记
    OSS上传图片无法在线预览的解决方案
    Linux中du、df显示不一致问题
    zookeeper作配置中心(存储支付信息)
    @Configuration结合@Bean实现对象的配置
  • 原文地址:https://www.cnblogs.com/JasonLGJnote/p/11965421.html
Copyright © 2011-2022 走看看