- 浏览: 185353 次
- 性别:
- 来自: 浙江
文章分类
最新评论
Fragment无法切换问题
- 博客分类:
- android
Android有一个回收机制,当内存不足时,会自动回收相关内存。
我们使用FragmentActivity放入Fragment的方法实现app的导航功能。
oncreate方法中,初始化Fragment数组,代码如下:
private void initFragmentTab() {
HomeFragment homeFragment = new HomeFragment();
StyleFragment styleFragment = new StyleFragment();
ShopFragment shopFragment = new ShopFragment();
FoundFragment foundFragment = new FoundFragment();
MeFragment meFragment = new MeFragment();
fragments = new Fragment[]{homeFragment, styleFragment, shopFragment, foundFragment, meFragment};
}
Fragment首页的添加代码如下:
FragmentTransaction begin = fragmentManager.beginTransaction();
begin.add(R.id.fragment_container, fragments[HOME_FRAGMENT_INDEX], HOME_FRAGMENT_INDEX + "").show(fragments[HOME_FRAGMENT_INDEX]).commit();
Fragment的切换实现代码如下:
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (!fragments[currentIndex].isHidden()) {
transaction.hide(fragments[currentIndex]);
}
if (!fragments[index].isAdded()) {
transaction.add(R.id.fragment_container, fragments[index], "" + index);
}
transaction.show(fragments[index]).commit();
currentIndex:当前fragment下标索引
index:准备跳转的下标索引。
在正常情况下,Fragment的切换成功。但当同时打开别的app导致终端内存不足,回收FragmentActivity。此时可以发现FragmentActivity切换不成功,一致停留在某一Fragment上。
经过调试,App内存不足时,Activity被回收,再次回到Activity时,oncreate方法再次被执行,此时Fragment数组则是被新实例化。在执行切换时hide与show方法操作的是新的实例,然而显示在屏幕上的却是原先的Fragment。这就是Fragment切换失败的原因。
了解了bug之后,我们可以做出相关的方法,方法很多,下面是我的一个解决方案:
在每次调用ActivityFragment的oncreate方法时,把原先放入的Fragment全部清空。代码如下:
private void removeAllFragment(){
FragmentTransaction begin = fragmentManager.beginTransaction();
for (int i = 0; i < FragmentCount; i++) {
Fragment f = fragmentManager.findFragmentByTag(i + "");
if (f != null && f.isAdded()) {
begin.remove(f);
}
}
begin.commit();
}
然后在进行ActivityFragment的初始化工作。
测试通过!
我们使用FragmentActivity放入Fragment的方法实现app的导航功能。
oncreate方法中,初始化Fragment数组,代码如下:
private void initFragmentTab() {
HomeFragment homeFragment = new HomeFragment();
StyleFragment styleFragment = new StyleFragment();
ShopFragment shopFragment = new ShopFragment();
FoundFragment foundFragment = new FoundFragment();
MeFragment meFragment = new MeFragment();
fragments = new Fragment[]{homeFragment, styleFragment, shopFragment, foundFragment, meFragment};
}
Fragment首页的添加代码如下:
FragmentTransaction begin = fragmentManager.beginTransaction();
begin.add(R.id.fragment_container, fragments[HOME_FRAGMENT_INDEX], HOME_FRAGMENT_INDEX + "").show(fragments[HOME_FRAGMENT_INDEX]).commit();
Fragment的切换实现代码如下:
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (!fragments[currentIndex].isHidden()) {
transaction.hide(fragments[currentIndex]);
}
if (!fragments[index].isAdded()) {
transaction.add(R.id.fragment_container, fragments[index], "" + index);
}
transaction.show(fragments[index]).commit();
currentIndex:当前fragment下标索引
index:准备跳转的下标索引。
在正常情况下,Fragment的切换成功。但当同时打开别的app导致终端内存不足,回收FragmentActivity。此时可以发现FragmentActivity切换不成功,一致停留在某一Fragment上。
经过调试,App内存不足时,Activity被回收,再次回到Activity时,oncreate方法再次被执行,此时Fragment数组则是被新实例化。在执行切换时hide与show方法操作的是新的实例,然而显示在屏幕上的却是原先的Fragment。这就是Fragment切换失败的原因。
了解了bug之后,我们可以做出相关的方法,方法很多,下面是我的一个解决方案:
在每次调用ActivityFragment的oncreate方法时,把原先放入的Fragment全部清空。代码如下:
private void removeAllFragment(){
FragmentTransaction begin = fragmentManager.beginTransaction();
for (int i = 0; i < FragmentCount; i++) {
Fragment f = fragmentManager.findFragmentByTag(i + "");
if (f != null && f.isAdded()) {
begin.remove(f);
}
}
begin.commit();
}
然后在进行ActivityFragment的初始化工作。
测试通过!
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 987使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 749java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 608我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 587Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 526先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 642相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 852参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 402图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 461参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2649今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 555由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 614最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 676以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 471参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 424参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1236参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2380参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 642http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 612用代码简单介绍下自定义控件的使用: 先看主activity: ... -
android使用html标签
2015-03-13 20:42 723有些时候我们需要在一个textview上,对部分字体进行特殊效 ...
相关推荐
5. 实现 Fragment 点击切换:在 ViewPager 中实现 OnPageChangeListener,用于监听ViewPager 的滑动事件,并在滑动时切换 Fragment。 6. 实现 RadioButton 点击切换:在 RadioGroup 中实现 OnCheckedChangeListener...
通过以上策略,我们可以有效地解决Fragment切换时的重叠问题,提供流畅的用户体验。在实际项目中,应根据具体情况进行调整和优化,确保代码的稳定性和性能。同时,使用`FragmentSimpleSwitch`这样的示例代码进行实践...
然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失用户在Fragment中的状态。为了解决这个问题,我们需要采取一系列策略来...
Fragment的切换是Android应用中常见的交互方式,尤其在平板或大屏幕设备上,能够提供更好的用户体验。本教程将通过一个简单的"fragment互相切换"的Demo来详细介绍如何实现这一功能。 首先,我们需要理解Fragment的...
在Fragment切换中应用此效果,可以提升用户体验,使应用更具动态感和交互性。 要实现Fragment的翻牌切换效果,我们需要借助Android的动画库,特别是`ObjectAnimator`和`PropertyValuesHolder`。首先,定义两个动画...
当我们想要增强用户体验,使界面变化更加平滑和吸引人时,可以使用Fragment切换动画。本篇文章将深入探讨Android中的Fragment切换动画及其实现方法。 首先,理解Fragment的基本操作是必要的。在Android中,我们可以...
理解Fragment的生命周期是进行Fragment切换的基础。Fragment有自己的生命周期,包括onAttach(), onCreate(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), ...
本教程将深入探讨如何在Android应用程序中实现Fragment之间的动画切换效果,尤其适用于平板电脑和大屏设备。 首先,我们需要了解Fragment的基本操作。在Android中,我们通常使用FragmentManager和...
"点击切换Fragment并滑动切换Fragment"的主题涉及到两个核心概念:用户交互触发的Fragment切换和Pager组件实现的滑动切换。 1. Fragment的点击切换: Fragment的切换通常通过Button、MenuItem等UI元素的点击事件来...
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment 但是,这样会有一个问题 ,应该很多朋友都遇到过: 每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法 那么如何让多个...
标题"android fragment切换防止destroy"正是针对这一问题展开讨论。 在Android系统中,当Activity发生配置改变(如屏幕旋转)时,默认情况下会销毁并重新创建Activity及其中的Fragment。这种行为可能导致数据丢失和...
"android fragment 页面切换简单demo"是一个典型的示例,用于演示如何在Android应用中使用Fragment进行页面切换。这个demo旨在通过简洁明了的代码帮助开发者理解Fragment的基本用法。 首先,Fragment是Android SDK...
本文主要供学习使用,主要讲解点击不同按钮之后,相应...所以这篇文章是写的比较简单的一个实例,目的就是使用最新的Fragment来实现这种切换效果,希望初学者能够完全理解其中的思路。为以后更复杂的开发打好基础。
Fragment实现切换界面 点击下方的每一个布局 实现跳转
"Android fragment切换动画.rar"这个压缩包文件很显然是关于如何在Android中为Fragment切换添加动画效果的示例代码或教程。 Fragment的切换动画不仅能够提升应用的视觉吸引力,还能使用户操作更加流畅自然。Android...
在本教程中,我们将深入探讨如何在Android应用中使用Fragment实现多个页面的切换。 首先,了解Fragment的基本概念。Fragment是Activity的一部分,有自己的生命周期,可以在Activity中添加、移除或替换。它们有自己...
本教程将深入探讨如何使用`RadioGroup`来切换不同的`Fragment`,以实现更丰富的用户交互。 首先,`RadioGroup`是Android中的一个布局容器,它可以包含一个或多个`RadioButton`。`RadioGroup`的特性在于,当用户点击...
在实际项目中,Fragment切换不仅限于单一的添加和替换操作,还可能涉及到堆栈管理,如BackStack。BackStack允许用户通过按返回键回退到前一个Fragment,就像浏览器的历史记录一样。使用`addToBackStack()`方法可以在...
这就是“fragment切换动画”。 在Android中,我们可以自定义Fragment切换动画,实现进入和退出动画。这些动画可以通过FragmentTransaction的setCustomAnimation方法来设置。例如,可以设置一个淡入淡出的效果,使得...
// 在这里进行Fragment切换操作 FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); if (currentFragment...