在项目中切换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切换动画及其实现方法。 首先,理解Fragment的基本操作是必要的。在Android中,我们可以使用`FragmentManager`和`FragmentTransaction`来管理Fragment的生命周期和状态。例如...
"Android fragment切换动画.rar"这个压缩包文件很显然是关于如何在Android中为Fragment切换添加动画效果的示例代码或教程。 Fragment的切换动画不仅能够提升应用的视觉吸引力,还能使用户操作更加流畅自然。Android...
本教程将深入探讨如何在Android应用程序中实现Fragment之间的动画切换效果,尤其适用于平板电脑和大屏设备。 首先,我们需要了解Fragment的基本操作。在Android中,我们通常使用FragmentManager和...
4. **利用FragmentManager和BackStack**: 当我们使用FragmentManager的beginTransaction().add()或replace()方法切换Fragment时,可以将操作添加到回退栈。这样,当用户点击返回按钮时,系统会自动恢复之前的状态。...
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment 但是,这样会有一个问题 ,应该很多朋友都遇到过: 每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法 那么如何让多个...
总之,`Fragment.replace()`是Android开发中处理动态界面的关键方法,它使得开发者能够灵活地在Activity中管理和切换不同的Fragment,提高应用的用户体验。熟练掌握`Fragment.replace()`的使用,将有助于我们构建...
在这个"android界面切换 Fragment实例"中,我们将深入探讨如何使用Fragment进行界面切换。 Fragment的创建首先需要继承Fragment类并实现其生命周期方法。例如,我们可以创建一个名为`MyFragment`的类,包含`...
本文主要供学习使用,主要讲解点击不同按钮之后,相应...所以这篇文章是写的比较简单的一个实例,目的就是使用最新的Fragment来实现这种切换效果,希望初学者能够完全理解其中的思路。为以后更复杂的开发打好基础。
在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可动态组合的应用界面,尤其是在平板电脑等大屏幕设备上。本文将深入探讨Fragment的管理以及如何解决Fragment重叠问题。 首先,Fragment是在...
为了解决这个问题,我们可以利用Fragment的`hide()`和`show()`方法来切换Fragment,而不是每次都通过`replace()`或`add()`操作,这样可以避免Fragment的生命周期被重置。 首先,我们需要在Activity的布局文件中预先...
在Android开发中,为了提供更好的用户体验,我们经常需要对Fragment进行平滑、有动画效果的切换。这就是“fragment切换动画”。 在Android中,我们可以自定义Fragment切换动画,实现进入和退出动画。这些动画可以...
在Android开发中,Fragment是构建可复用UI组件的关键部分,尤其在设计具有多个视图或屏幕的复杂界面时。本教程将详细讲解如何利用Fragment实现按钮间的切换,以达到在不同界面间导航的目的。 首先,理解Fragment的...
"android fragment 页面切换简单demo"是一个典型的示例,用于演示如何在Android应用中使用Fragment进行页面切换。这个demo旨在通过简洁明了的代码帮助开发者理解Fragment的基本用法。 首先,Fragment是Android SDK...
1. **创建Fragment类**:首先,我们需要为每个要切换的界面创建一个Fragment类,继承自android.app.Fragment或者androidx.fragment.app.Fragment。每个Fragment类内部应包含对应的布局文件,并在onCreateView()方法...
在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可重用、模块化的界面。本教程将深入探讨如何在首页实现...通过学习和实践这两种方式,你将能够更好地理解和掌握Android中Fragment的管理和切换。
这个"android fragment demo 源码,切换"是一个示例项目,用于演示如何在Android应用中实现Fragment的切换。 Fragment的基本概念: 1. **Fragment生命周期**:Fragment有自己的生命周期,包括onAttach(), onCreate...
本项目聚焦于解决Fragment切换过程中的问题,尤其是针对初学者可能会遇到的V4库报错,以及如何实现流畅的Fragment切换。 首先,我们来探讨Fragment的基础知识。Fragment是Android 3.0(API级别11)引入的,目的是...
在本教程中,我们将深入探讨如何在Android应用中使用Fragment实现多个页面的切换。 首先,了解Fragment的基本概念。Fragment是Activity的一部分,有自己的生命周期,可以在Activity中添加、移除或替换。它们有自己...
本篇文章将深入讲解如何在Android中实现Fragment之间的切换。 首先,我们需要了解Activity与Fragment的关系。Activity是Android应用的基本单元,它负责管理和协调屏幕上的多个Fragment。每个Fragment都有自己的生命...