`
l540151663
  • 浏览: 185447 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

Fragment无法切换问题

 
阅读更多
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的初始化工作。
测试通过!

分享到:
评论

相关推荐

    Fragment点击切换

    5. 实现 Fragment 点击切换:在 ViewPager 中实现 OnPageChangeListener,用于监听ViewPager 的滑动事件,并在滑动时切换 Fragment。 6. 实现 RadioButton 点击切换:在 RadioGroup 中实现 OnCheckedChangeListener...

    Fragment多个的切换重叠问题解决

    通过以上策略,我们可以有效地解决Fragment切换时的重叠问题,提供流畅的用户体验。在实际项目中,应根据具体情况进行调整和优化,确保代码的稳定性和性能。同时,使用`FragmentSimpleSwitch`这样的示例代码进行实践...

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

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

    fragment互相切换 简单demo

    Fragment的切换是Android应用中常见的交互方式,尤其在平板或大屏幕设备上,能够提供更好的用户体验。本教程将通过一个简单的"fragment互相切换"的Demo来详细介绍如何实现这一功能。 首先,我们需要理解Fragment的...

    Fragment翻牌切换效果

    在Fragment切换中应用此效果,可以提升用户体验,使应用更具动态感和交互性。 要实现Fragment的翻牌切换效果,我们需要借助Android的动画库,特别是`ObjectAnimator`和`PropertyValuesHolder`。首先,定义两个动画...

    Android Fragment切换动画

    当我们想要增强用户体验,使界面变化更加平滑和吸引人时,可以使用Fragment切换动画。本篇文章将深入探讨Android中的Fragment切换动画及其实现方法。 首先,理解Fragment的基本操作是必要的。在Android中,我们可以...

    Fragment间的切换

    理解Fragment的生命周期是进行Fragment切换的基础。Fragment有自己的生命周期,包括onAttach(), onCreate(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), ...

    Android下Fragment的动画切换效果

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

    点击切换Fragment并滑动切换Fragment

    "点击切换Fragment并滑动切换Fragment"的主题涉及到两个核心概念:用户交互触发的Fragment切换和Pager组件实现的滑动切换。 1. Fragment的点击切换: Fragment的切换通常通过Button、MenuItem等UI元素的点击事件来...

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

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

    android fragment切换防止destroy

    标题"android fragment切换防止destroy"正是针对这一问题展开讨论。 在Android系统中,当Activity发生配置改变(如屏幕旋转)时,默认情况下会销毁并重新创建Activity及其中的Fragment。这种行为可能导致数据丢失和...

    android fragment 页面切换简单demo

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

    Android Fragment之间的切换

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

    Fragment实现切换界面

    Fragment实现切换界面 点击下方的每一个布局 实现跳转

    Android fragment切换动画.rar

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

    Android之Fragment多个页面切换实现

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

    用RadioGroup实现Fragment的切换

    本教程将深入探讨如何使用`RadioGroup`来切换不同的`Fragment`,以实现更丰富的用户交互。 首先,`RadioGroup`是Android中的一个布局容器,它可以包含一个或多个`RadioButton`。`RadioGroup`的特性在于,当用户点击...

    fragment,activity之随意切换

    在实际项目中,Fragment切换不仅限于单一的添加和替换操作,还可能涉及到堆栈管理,如BackStack。BackStack允许用户通过按返回键回退到前一个Fragment,就像浏览器的历史记录一样。使用`addToBackStack()`方法可以在...

    fragment切换动画

    这就是“fragment切换动画”。 在Android中,我们可以自定义Fragment切换动画,实现进入和退出动画。这些动画可以通过FragmentTransaction的setCustomAnimation方法来设置。例如,可以设置一个淡入淡出的效果,使得...

    android界面切换 Fragment实例

    // 在这里进行Fragment切换操作 FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); if (currentFragment...

Global site tag (gtag.js) - Google Analytics