彻底解决Fragment重复加载问题,杜绝一切卡顿现象


这些天一直在忙项目上的事,今天难得有空,刚好前两天遇见一个关于fragment的问题,于是乎,写篇日记记录记录,先简单介绍fragment 吧,fragement是Android 3.0引入的概念,直译为:碎片、片段。其目的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。

Fragment的优点有:

 1.Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。
 2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。
 3.Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。
 4.Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。

  
  上面简单介绍了一下,相信大家都有所了解,现在进入今天的主题吧,Fragment的重复加载问题。之前在一些小项目中经常用到Fragment,一般都使用fragmentTransaction.replace(R.id.content,user_Fa)去动态加载布局。因为之前项目小,user_fa该fragment数据量比较少,对整体项目并无影响所以就没去管,直到前天,遇到加载的fragment数据量比较大。切换fragment时出现卡顿现象,分析其原因竟然是每次调用replace都会去加载一次fragment,而此时的fragment又好大,所以就出现卡顿现象,加载一次fragment说白了就是每次replace都会调用onCreateView方法,要是不信你可以打Log测试一下,那碰到这卡顿怎么办勒,还记得fragment给我们提供了另外的方法吗?add和show方法可以帮我解决这个问题,看代码吧
  

public void handler(int index){
        fragmentTransaction = fragmentManager.beginTransaction();

        switch (index) {
        case 1:
            //如果tabFragment1为空,说明还没创建Tab1
            if(tabFragment1==null){
                tabFragment1 = new TabFragment1();
            }
            //如果isAdded == true 表示 tab1 已加入布局中
            if(!tabFragment1.isAdded()){
                fragmentTransaction.add(R.id.content,tabFragment1);
            }
            else{
                //如果tab2不为空,把tab2隐藏就是、
                if(tabFragment2!=null){
                    fragmentTransaction.hide(tabFragment2);
                }
                //Log.v("rush_yu", "hh");
                //显示tab1
                fragmentTransaction.show(tabFragment1);
            }
            break;
        case 2:
            //如果tabFragment2为空,说明还没创建Tab2
            if(tabFragment2==null){
                tabFragment2 = new TabFragment2();
            }
            //如果isAdded == true 表示 tab2 已加入布局中
            if(!tabFragment2.isAdded()){
                fragmentTransaction.add(R.id.content,tabFragment2);
            }
            else{
                //如果tab2不为空,把tab1隐藏就是、
                if(tabFragment1!=null){
                    fragmentTransaction.hide(tabFragment1);
                }
                //显示tab2
                fragmentTransaction.show(tabFragment2);
                //Log.v("rush_yu", "hh1");
            }
            break;

        default:
            break;
        }
        fragmentTransaction.commit();
    }
}

确认只是首次进入创建日志
fragment加载问题解决咯, 试一下吧,切换是否流畅。
要源码的戳我 http://download.csdn.net/detail/qq_29282475/9411964
  
  
  

你可能感兴趣的:(彻底解决Fragment重复加载问题,杜绝一切卡顿现象)