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出来的获取焦点没问题。也需要自己处理。

  • 相关阅读:
    软件概要设计
    项目文件-搭建工程
    select标签中设置只读几种解决方案
    PHP ob缓冲区函数的使用
    laravel笔记
    ubuntu系统更新命令
    RBAC权限控制系统
    laravel 数据库获取值的常用方法
    php中获取数据 php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
    php 文件上传 $_FILES 错误码
  • 原文地址:https://www.cnblogs.com/JasonLGJnote/p/11965421.html
Copyright © 2011-2022 走看看