`
kevinffk
  • 浏览: 34565 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ANDROID FRAMENT的切换(解决REPLACE的低效)

阅读更多

在项目中切换Fragment,一直都是用replace()方法来替换Fragment。但是这样做有一个问题,每次切换的时候Fragment都会重新实列化,重新加载一次数据,这样做会非常消耗性能用用户的流量。

官方文档解释说:replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。

正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
这样就能做到多个Fragment切换不重新实例化:

切换方法:

/**
     * fragment 切换
     * 
     * @param from
     * @param to
     */
    public void switchContent(Fragment from, Fragment to, int position) {
        if (mContent != to) {
            mContent = to;
            FragmentTransaction transaction = fm.beginTransaction();
            if (!to.isAdded()) { // 先判断是否被add过
                transaction.hide(from)
                        .add(R.id.content_frame, to, tags[position]).commit(); // 隐藏当前的fragment,add下一个到Activity中
            } else {
                transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
            }
        }
    }

 

这样做好后看似没问题。但是比较低端的手机内存不足的时候会造成fragment重叠的情况。

实是由Activity被回收后重启所导致的Fragment重复创建和重叠的问题。

在Activity onCreate()中添加Fragment的时候一定不要忘了检查一下savedInstanceState:

多个Fragment重叠则可以这样处理:通过FragmentManager找到所有的UI Fragment,按需要show()某一个Fragment,hide()其他即可!

为了能准确找出所需的Fragment,所以在add()或者replace() Fragment的时候记得要带上tag参数,因为一个ViewGroup 容器可以依附add()多个Fragment,它们的id自然是相同的。

 

/**
     * 状态检测 用于内存不足的时候保证fragment不会重叠
     * 
     * @param savedInstanceState
     */
    private void stateCheck(Bundle savedInstanceState) {
        if (savedInstanceState == null) {
            fm = getFragmentManager();
            FragmentTransaction fts = fm.beginTransaction();
            AnimationFragment af = new AnimationFragment();
            mContent = af;
            fts.add(R.id.content_frame, af);
            fts.commit();
        } else {
            AnimationFragment af = (AnimationFragment) getFragmentManager()
                    .findFragmentByTag(tags[0]);
            PlainFragment pf = (PlainFragment) getFragmentManager()
                    .findFragmentByTag(tags[1]);
            RecordFragment rf = (RecordFragment) getFragmentManager()
                    .findFragmentByTag(tags[2]);
            InformationFragment inf = (InformationFragment) getFragmentManager()
                    .findFragmentByTag(tags[3]);
            TestingFragment tf = (TestingFragment) getFragmentManager()
                    .findFragmentByTag(tags[4]);
            getFragmentManager().beginTransaction().show(af).hide(pf).hide(rf)
                    .hide(inf).hide(tf).commit();
        }
    }

 

分享到:
评论

相关推荐

    Android Fragment切换动画

    本篇文章将深入探讨Android中的Fragment切换动画及其实现方法。 首先,理解Fragment的基本操作是必要的。在Android中,我们可以使用`FragmentManager`和`FragmentTransaction`来管理Fragment的生命周期和状态。例如...

    Android fragment切换动画.rar

    "Android fragment切换动画.rar"这个压缩包文件很显然是关于如何在Android中为Fragment切换添加动画效果的示例代码或教程。 Fragment的切换动画不仅能够提升应用的视觉吸引力,还能使用户操作更加流畅自然。Android...

    Android下Fragment的动画切换效果

    本教程将深入探讨如何在Android应用程序中实现Fragment之间的动画切换效果,尤其适用于平板电脑和大屏设备。 首先,我们需要了解Fragment的基本操作。在Android中,我们通常使用FragmentManager和...

    Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,更新版

    4. **利用FragmentManager和BackStack**: 当我们使用FragmentManager的beginTransaction().add()或replace()方法切换Fragment时,可以将操作添加到回退栈。这样,当用户点击返回按钮时,系统会自动恢复之前的状态。...

    Android 关于fragment切换重新加载的解决方法

    在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment 但是,这样会有一个问题 ,应该很多朋友都遇到过: 每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法 那么如何让多个...

    Android开发之fragment之replace用法

    总之,`Fragment.replace()`是Android开发中处理动态界面的关键方法,它使得开发者能够灵活地在Activity中管理和切换不同的Fragment,提高应用的用户体验。熟练掌握`Fragment.replace()`的使用,将有助于我们构建...

    android界面切换 Fragment实例

    在这个"android界面切换 Fragment实例"中,我们将深入探讨如何使用Fragment进行界面切换。 Fragment的创建首先需要继承Fragment类并实现其生命周期方法。例如,我们可以创建一个名为`MyFragment`的类,包含`...

    Android Fragment之间的切换

    本文主要供学习使用,主要讲解点击不同按钮之后,相应...所以这篇文章是写的比较简单的一个实例,目的就是使用最新的Fragment来实现这种切换效果,希望初学者能够完全理解其中的思路。为以后更复杂的开发打好基础。

    Android中Fragment管理及重叠问题的解决方法

    在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可动态组合的应用界面,尤其是在平板电脑等大屏幕设备上。本文将深入探讨Fragment的管理以及如何解决Fragment重叠问题。 首先,Fragment是在...

    android fragment切换防止destroy

    为了解决这个问题,我们可以利用Fragment的`hide()`和`show()`方法来切换Fragment,而不是每次都通过`replace()`或`add()`操作,这样可以避免Fragment的生命周期被重置。 首先,我们需要在Activity的布局文件中预先...

    fragment切换动画

    在Android开发中,为了提供更好的用户体验,我们经常需要对Fragment进行平滑、有动画效果的切换。这就是“fragment切换动画”。 在Android中,我们可以自定义Fragment切换动画,实现进入和退出动画。这些动画可以...

    Android Fragment实现按钮间的切换

    在Android开发中,Fragment是构建可复用UI组件的关键部分,尤其在设计具有多个视图或屏幕的复杂界面时。本教程将详细讲解如何利用Fragment实现按钮间的切换,以达到在不同界面间导航的目的。 首先,理解Fragment的...

    android fragment 页面切换简单demo

    "android fragment 页面切换简单demo"是一个典型的示例,用于演示如何在Android应用中使用Fragment进行页面切换。这个demo旨在通过简洁明了的代码帮助开发者理解Fragment的基本用法。 首先,Fragment是Android SDK...

    android fragment实现按钮切换

    1. **创建Fragment类**:首先,我们需要为每个要切换的界面创建一个Fragment类,继承自android.app.Fragment或者androidx.fragment.app.Fragment。每个Fragment类内部应包含对应的布局文件,并在onCreateView()方法...

    Android 首页Fragment切换常用姿势

    在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可重用、模块化的界面。本教程将深入探讨如何在首页实现...通过学习和实践这两种方式,你将能够更好地理解和掌握Android中Fragment的管理和切换。

    android fragment demo 源码,切换

    这个"android fragment demo 源码,切换"是一个示例项目,用于演示如何在Android应用中实现Fragment的切换。 Fragment的基本概念: 1. **Fragment生命周期**:Fragment有自己的生命周期,包括onAttach(), onCreate...

    android中的fragment切换的优化

    本项目聚焦于解决Fragment切换过程中的问题,尤其是针对初学者可能会遇到的V4库报错,以及如何实现流畅的Fragment切换。 首先,我们来探讨Fragment的基础知识。Fragment是Android 3.0(API级别11)引入的,目的是...

    Android之Fragment多个页面切换实现

    在本教程中,我们将深入探讨如何在Android应用中使用Fragment实现多个页面的切换。 首先,了解Fragment的基本概念。Fragment是Activity的一部分,有自己的生命周期,可以在Activity中添加、移除或替换。它们有自己...

    Android-实现切换Fragment页功能的实现代码

    本篇文章将深入讲解如何在Android中实现Fragment之间的切换。 首先,我们需要了解Activity与Fragment的关系。Activity是Android应用的基本单元,它负责管理和协调屏幕上的多个Fragment。每个Fragment都有自己的生命...

Global site tag (gtag.js) - Google Analytics