【Fragment精深系列7】Fragment切换优化

一、Fragment+RadioGroup

??在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment:然后总感觉切换的时候有些卡顿。

1、以前的代码:

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int checkID) {
                switch (checkID) {
                    case R.id.rabt01:
                    if (searchFragment == null) {
                        searchFragment = new SearchFragment();
                        getSupportFragmentManager().beginTransaction().hide().add(R.id.linnerlayout, searchFragment).commit();
                    }
                        break;
                    case R.id.rabt02:
                        downFragment = new DownFragment();
                        getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, downFragment).commit();
                        break;
                    case R.id.rabt03:
                        listenFragment = new ListenFragment();
                        getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, listenFragment).commit();
                        break;
                    case R.id.rabt04:
                        myFragment = new MyFragment();
                        getSupportFragmentManager().beginTransaction().replace(R.id.linnerlayout, myFragment).commit();
                        break;
                }
            }
        });

2、原因分析:

??因为replace每次都会重新调用fragment的onCreateView()方法,浪费时间。

3、解决方法:

??正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。这样就不会重复调用onCreateView函数了。

??FragmentTransactioin 可以用来添加,删除fragment,也可以控制fragment的显示和隐藏。

??这是如果调用addToBackStack(null),此时的状态就会被保存在回退栈,按返回键的时候就会显示出栈顶的。

Android 优化Fragment防止页面多次inflate:http://www.th7.cn/Program/Android/201411/311607.shtml

4、代码改进

在不同Fragment之间切换的方法:http://www.th7.cn/Program/Android/201503/408512.shtml

需要维护一个全局的变量来记录当前的fragment。另外需要做一些判断,可以提取成方法的。

对Fragment切换的优化:http://www.tuicool.com/articles/iEfIvqb

二、ViewPager+Fragment

Fragment的陷阱:http://mobile.51cto.com/abased-446691.htm

关于fragment+viewpager的优化:http://www.bubuko.com/infodetail-648897.html

时间: 2024-12-24 12:44:00

【Fragment精深系列7】Fragment切换优化的相关文章

【Fragment精深系列9】Fragment vs Activity

1.fragment对于自身事件的处理,有的时候需要借助activity,使用接口回调. 2.fragment的生命周期受activity的影响. 3.findviewbyid的方式不同. 4.fragment的回退栈中存的是事务,而activity的任务栈中存的是activity对象.fragment的回退栈的管理由与他绑定的activity来负责管理,程序中必须显示的调用addToBackStack才会有效果. 5.activity是四大组件之一,而fragment不是.fragment的显

【Fragment精深系列5】fragment findViewById()返回null完全解析

一.引入 ??你是不是经常遇到在fragment中调用findViewById方法寻找fragment布局文件中的控件返回null的现象.我之前也遇到了这个问题,虽然后来解决了,但是心中一直有疑惑,最近有时间停下来,结合别人的解答和自己的思考,对这个问题进行彻底的梳理. 二.使用getActivity().findViewById 1.getActivity的介绍 ??Fragment中有一个getActivity()的方法.返回与Fragment关联的Activity对象(通过该对象可以查找a

【Fragment精深系列8】Fragment对自身事件的处理

??Fragment自身的事件处理,不一定非要使用接口回调,在activity中实现具体的处理方法.如果事件处理比较简单,Fragment本身就可以处理,比如Fragment的上下文菜单的处理,简单的话,就不需要使用接口回调.下面就是一个简单的使用接口回调的案例: 一.案例:处理fragment中的popupmenu点击事件,跳转到其他的activity 二.fragment的代码: package com.ht.phoneguard.fragment; import android.app.A

Android系列之Fragment(一)----Fragment加载到Activity当中

Android系列之Fragment(一)----Fragment加载到Activity当中 ?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3978989.html 联系方式:[email protected] [正文] Android上的界面展示都是通过Activity实现的,Activity实在是太常用了.但是Activity也有它的局限性

Android系列之Fragment(二)Fragment的生命周期和返回栈

Android系列之Fragment(二)Fragment的生命周期和返回栈 - Android - 次元立方网 - 电脑知识与技术互动交流平台 [正文] 上一章节中(Android系列之Fragment(一)----Fragment加载到Activity当中),我们对Fragment的生命周期进行了简单介绍,这一章节将对生命周期和返回栈进行详细介绍. 一.Fragment的生命周期初探: 因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activ

Android系列之Fragment(二)----Fragment的生命周期和返回栈

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3983234.html 联系方式:[email protected] [正文] 上一章节中(Android系列之Fragment(一)----Fragment加载到Activity当中),我们对Fragment的生命周期进行了简单介绍,这一章节将对生命周期和返回栈进行详细介绍. 一.Fragmen

android中viewPager+fragment实现的屏幕左右切换(进阶篇)

Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等.可以看做是一个子Activity. 先看一下布局: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match

在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页与FragmentPagerAdapter页面预加载的解决方案

1. 在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页 先上代码: 1 mAdapter = new OrderAdapter(getChildFragmentManager()); 2 ViewPager pager = (ViewPager) v.findViewById(R.id.pager); 3 pager.setAdapter(mAdapter); 4 5 TabPageIndicator indicator = (TabPageI

两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容

尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky 需求 在搭界面有这么样一个需求:需要两层的Fragment嵌套,内层需要滑动切换效果,外层界面不需要滑动效果.那么内层使用ViewPager切换,外层就使用replace切换.这样搭出来的界面不能得到需要的效果,内层的Fragment只有第一次能显示内容,之后切换外层Fragment时,内层Fragent都是空着的. 我再尝试两层Fragment都使用replace切换,这样就能达到效果了.但是项