原文:
http://www.yrom.net/blog/2013/03/10/fragment-switch-not-restart/#
在项目中需要进行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,显示下一个
}
}
}
分享到:
相关推荐
然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失用户在Fragment中的状态。为了解决这个问题,我们需要采取一系列策略来...
在项目中需要进行Fragment的切换,一直都是用replace()...那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需hide()当前,show()另一个。
通过研究这些示例,你可以更好地理解Fragment在实际应用中的使用方式,以及如何实现在一个Activity中切换多个Fragment页面。实践是最好的老师,尝试修改和扩展这个项目,以提升你的Android开发技能。
在处理多个Fragment切换时,正确管理它们的生命周期是非常关键的。标题"fragment 切换不需要不停地实例化view"表明我们要讨论的是如何避免在Fragment切换时频繁地创建和销毁Fragment实例,以优化性能和避免潜在的...
在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可重用的模块化界面,尤其是在处理大型屏幕如平板电脑时更为重要。Fragment可以独立于Activity存在,并且可以在Activity的不同部分展示,增强...
在实现Fragment页切换时,通常在一个Activity中添加并管理多个Fragment,通过切换显示不同的Fragment来实现页面效果。 以下是一些关键步骤和代码示例: 1. **在Activity中添加初始Fragment** 在Activity的布局XML...
ViewPager是一个可以滑动浏览多个页面的控件,特别适合用来展示多个Fragment。要使用ViewPager,我们需要创建一个PagerAdapter子类,比如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,重写`getItem()`方法...
Fragment是Android应用开发中的一个重要组件,它允许在同一个Activity中管理多个UI片段。FragmentTransaction是Android SDK提供的一个接口,用于处理Fragment的添加、删除、替换等操作。在Android开发中,为了提供更...
`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,用于创建可重用、可管理的UI模块。下面将详细介绍如何利用这两个组件实现滑动切换页面的功能。 首先,`ViewPager`是...
5. **管理多Fragment**:在一个Activity中,你可能会同时使用多个Fragment。在这种情况下,使用BackStack管理Fragment的添加、替换和回退操作。通过调用`addToBackStack()`方法,可以在FragmentTransaction中保存一...
在每个按钮的点击事件监听器中,我们可以实例化相应的Fragment,并通过FragmentTransaction的replace()方法将其添加到容器布局中。例如: ```java FragmentTransaction transaction = getSupportFragmentManager()....
例如,在平板电脑上,一个Activity可能可以容纳多个Fragment,而在手机上则可能只有一个。 在底部切换标签的实现中,通常会用到TabLayout和ViewPager这两个组件。TabLayout是Android Design Support Library的一...
Android提供了一个名为`TabLayout`的组件,它可以用来展示多个Tab,而`ViewPager`则用于滑动切换不同的内容页面。这两个组件常一起使用来实现Tab切换效果。 3. **设置TabLayout** 首先,在布局XML文件中添加`...
首先,`ViewPager`是Android SDK中的一个视图容器,它允许用户通过水平滑动来浏览多个页面。`ViewPager`通常与`PagerAdapter`或`FragmentPagerAdapter`一起使用,以便动态加载和管理页面内容。在这个案例中,我们...
在平板上,可能一个Activity会同时显示多个Fragment,而在手机上可能只有一个Fragment。 6. **实现tabs的例子** 实现tabs通常会用到`TabLayout`和`ViewPager`。`TabLayout`用于展示tab,`ViewPager`则用于滑动切换...
在Android开发中,`ViewPager` 是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现滑动切换的界面效果。在这个示例中,我们结合`ViewPager`、`Fragment`、`PagerAdapter` 和 `...
在这个案例中,ViewPager被用来在多个Fragment之间进行平滑切换,模拟微信中的聊天列表和聊天详情页的切换。 然后是ListView。ListView是Android中用于显示大量可滚动数据的视图组件,常用于展示列表或者表格数据。...
在Android应用开发中,...实践过程中,不仅可以加深对Fragment生命周期的理解,还能掌握如何利用ViewPager实现页面滑动,以及如何通过适配器管理多个Fragment。这是一个非常实用的技能,有助于提升Android开发能力。
在Fragment中使用FragmentTabHost,可以避免在Activity中直接处理多个Fragment的复杂性,使代码更易于维护。 实现FragmentTabHost的步骤如下: 1. **创建Fragment**:首先,你需要创建代表每个选项卡内容的...