`
zhouxiaoli521
  • 浏览: 562711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 让多个Fragment 切换时不重新实例化

 
阅读更多

在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment:

 public void switchContent(Fragment fragment) {
        if(mContent != fragment) {
            mContent = fragment;
            mFragmentMan.beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out)
                .replace(R.id.content_frame, fragment) // 替换Fragment,实现切换
                .commit();
        }
    }

 但是,这样会有一个问题:

每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量。

就想,如何让多个Fragment彼此切换时不重新实例化?

翻看了Android官方Doc,和一些组件的源代码,发现,replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。

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

public void switchContent(Fragment from, Fragment to) {
        if (mContent != to) {
            mContent = to;
            FragmentTransaction transaction = mFragmentMan.beginTransaction().setCustomAnimations(
                    android.R.anim.fade_in, R.anim.slide_out);
            if (!to.isAdded()) {    // 先判断是否被add过
                transaction.hide(from).add(R.id.content_frame, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
            } else {
                transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
            }
        }
    }

 

http://www.yrom.net/blog/2013/03/10/fragment-switch-not-restart/#

分享到:
评论

相关推荐

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

    然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失用户在Fragment中的状态。为了解决这个问题,我们需要采取一系列策略来...

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

    在项目中需要进行Fragment的切换,一直都是用replace()...那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需hide()当前,show()另一个。

    Android之Fragment多个页面切换实现

    通过研究这些示例,你可以更好地理解Fragment在实际应用中的使用方式,以及如何实现在一个Activity中切换多个Fragment页面。实践是最好的老师,尝试修改和扩展这个项目,以提升你的Android开发技能。

    fragment 切换不需要不停的实例化view

    在处理多个Fragment切换时,正确管理它们的生命周期是非常关键的。标题"fragment 切换不需要不停地实例化view"表明我们要讨论的是如何避免在Fragment切换时频繁地创建和销毁Fragment实例,以优化性能和避免潜在的...

    android界面切换 Fragment实例

    在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可重用的模块化界面,尤其是在处理大型屏幕如平板电脑时更为重要。Fragment可以独立于Activity存在,并且可以在Activity的不同部分展示,增强...

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

    在实现Fragment页切换时,通常在一个Activity中添加并管理多个Fragment,通过切换显示不同的Fragment来实现页面效果。 以下是一些关键步骤和代码示例: 1. **在Activity中添加初始Fragment** 在Activity的布局XML...

    Android 首页Fragment切换常用姿势

    ViewPager是一个可以滑动浏览多个页面的控件,特别适合用来展示多个Fragment。要使用ViewPager,我们需要创建一个PagerAdapter子类,比如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,重写`getItem()`方法...

    fragment切换动画

    Fragment是Android应用开发中的一个重要组件,它允许在同一个Activity中管理多个UI片段。FragmentTransaction是Android SDK提供的一个接口,用于处理Fragment的添加、删除、替换等操作。在Android开发中,为了提供更...

    Android ViewPager和Fragment 实现滑动切换页面

    `ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,用于创建可重用、可管理的UI模块。下面将详细介绍如何利用这两个组件实现滑动切换页面的功能。 首先,`ViewPager`是...

    android动态创建fragment,横竖屏切换.

    5. **管理多Fragment**:在一个Activity中,你可能会同时使用多个Fragment。在这种情况下,使用BackStack管理Fragment的添加、替换和回退操作。通过调用`addToBackStack()`方法,可以在FragmentTransaction中保存一...

    android页面布局fragment五个按钮切换页面

    在每个按钮的点击事件监听器中,我们可以实例化相应的Fragment,并通过FragmentTransaction的replace()方法将其添加到容器布局中。例如: ```java FragmentTransaction transaction = getSupportFragmentManager()....

    Android Fragment底部点击切换标签以及滑动切换

    例如,在平板电脑上,一个Activity可能可以容纳多个Fragment,而在手机上则可能只有一个。 在底部切换标签的实现中,通常会用到TabLayout和ViewPager这两个组件。TabLayout是Android Design Support Library的一...

    android 使用fragment 实现tab切换

    Android提供了一个名为`TabLayout`的组件,它可以用来展示多个Tab,而`ViewPager`则用于滑动切换不同的内容页面。这两个组件常一起使用来实现Tab切换效果。 3. **设置TabLayout** 首先,在布局XML文件中添加`...

    Android Studio使用ViewPager+Fragment实现仿微信滑动切换界面

    首先,`ViewPager`是Android SDK中的一个视图容器,它允许用户通过水平滑动来浏览多个页面。`ViewPager`通常与`PagerAdapter`或`FragmentPagerAdapter`一起使用,以便动态加载和管理页面内容。在这个案例中,我们...

    Fragment实例-Android Studio项目

    在平板上,可能一个Activity会同时显示多个Fragment,而在手机上可能只有一个Fragment。 6. **实现tabs的例子** 实现tabs通常会用到`TabLayout`和`ViewPager`。`TabLayout`用于展示tab,`ViewPager`则用于滑动切换...

    Android ViewPager实现圆点导航左右滑动和Fragment页面切换

    在Android开发中,`ViewPager` 是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现滑动切换的界面效果。在这个示例中,我们结合`ViewPager`、`Fragment`、`PagerAdapter` 和 `...

    Android 仿微信 fragment+viewpager+listview实例

    在这个案例中,ViewPager被用来在多个Fragment之间进行平滑切换,模拟微信中的聊天列表和聊天详情页的切换。 然后是ListView。ListView是Android中用于显示大量可滚动数据的视图组件,常用于展示列表或者表格数据。...

    Android应用源码之Fragment实现tab实例 代码.rar

    在Android应用开发中,...实践过程中,不仅可以加深对Fragment生命周期的理解,还能掌握如何利用ViewPager实现页面滑动,以及如何通过适配器管理多个Fragment。这是一个非常实用的技能,有助于提升Android开发能力。

    Fragment实现tab实例

    在Fragment中使用FragmentTabHost,可以避免在Activity中直接处理多个Fragment的复杂性,使代码更易于维护。 实现FragmentTabHost的步骤如下: 1. **创建Fragment**:首先,你需要创建代表每个选项卡内容的...

Global site tag (gtag.js) - Google Analytics