Android Fragment多层嵌套重影问题的解决方法

1解决bug的思想:

//step1:当bug被发现(排除极低偶然性,单次性,开发工具导致)

//step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug

//step3:根据重现场景找到对应的代码

//step4:分析区域代码是否会影响到其他功能.

//step5:做好数据的备份工作.(做好代码重构和恢复的准备,这样你才能肆无忌惮的捣鼓代码)

//step6:修复代码的过程中,你会发现可能有多种解决方案.试着采取不影响主线的解决方案.以免影响到其他的代码.

//step7:回顾所有的审查和测试等工作。思考bug的出现原因,避免下次再犯同类型的错误.

2导致原因

//step1:开发中,我们需要经常需要多个Fragment间切换,并且保存每个Fragment的状态.

//step2:官方的方法是使用replace()来替换Fragment,但是replace()的调用会导致Fragment的onCreteView()被调用,所以切换界面时会无法保存当前的状态.

//step3:因此一般采用add()、hide()与show()配合,来达到保存Fragment的状态.

3原理解析

//step1:正是因为使用了Fragment的状态保存,当系统内存不足,Fragment的宿主Activity回收的时候,Fragment的实例并没有随之被回收。

//step2:Activity被系统回收时,会主动调用onSaveInstance()方法来保存视图层(View Hierarchy),然后通过onRestoreInstanceState()方法来恢复视图层.(activity中两个方法的核心代码如下)
//step3:所以当Activity通过导航再次被重建时,之前被实例化过的Fragment依然会出现在Activity中
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
//取出视图层
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}
protected void onSaveInstanceState(Bundle outState) {
//保存视图层
outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());
Parcelable p = mFragments.saveAllState();
if (p != null) {
outState.putParcelable(FRAGMENTS_TAG, p);
}
getApplication().dispatchActivitySaveInstanceState(this, outState);
}

4解决方法(了解清楚后解决方法就容易了)

//solution1:

第一.简单的做法,就是给每层fragment加上背景色,重叠后也就看不见了

//solution2:

第二.进行判空操作.

如果为空,创建对象,add上去;

如果不为空,直接show出来;

(注意不要使用remove方法移除,hide即可)

以上所述是小编给大家介绍的Android Fragment多层嵌套重影问题的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android利用Fragment实现Tab选项卡效果

    利用Fragment实现Tab选项卡效果:  将RadioGroup与Fragment集合,实现tab选项卡效果,这里面最关键的几个文件: 1.FragmentTabAdapter类: /** *@Description: *@Author:Nate Robinson *@Since:2015-2-12 */ public class FragmentTabAdapter implements RadioGroup.OnCheckedChangeListener { private List<F

  • Android中ViewPager和Fragment的使用

    小案例 XML中 <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> 创建Fragment fragments = new Arr

  • Android中关于FragmentA嵌套FragmentB的问题

    问题描述: 在项目中Activity A中嵌套Fragment B,Fragment B中再嵌套Fragment C,如图: 问题1:在点击Activity A中主菜单1进行切换时,报错Fragment C already added. 解决:在Framgent B中添加Fragment C 调用add()时先判断fragmentC.isAdded() FragmentManager fm=getActivity().getSupportFragmentManager(); FragmentTr

  • Android 开发中fragment预加载问题

    我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里.请看关于Fragment里这个方法的API文档(国内镜像地址:ht

  • Android 嵌套Fragment的使用实例代码

    前言 之前的文章有介绍ActivityGroup,不少人问嵌套使用的问题,同样的需求在Fragment中也存在,幸好在最新的Android support 包已经支持这一特性!这里就跳过Fragment的介绍,需要注意的是TabActivity已经被标记为弃用(deprecated). 正文 一.准备 关于最新的Android兼容包的介绍,参见官网.可以在android sdk目录下extras/android/support/v13/android-support-v13.jar找到最新版,注

  • Android百度地图应用之MapFragment的使用

    一.简介  TextureMapFragment:用于显示地图片段.  二.示例3--Demo03MapFragment.cs  文件名:Demo02MapFragment.cs  简介:介绍在Fragment框架下使用地图  详述:介绍如何在Fragment框架下添加一个TextureMapFragment控件:  1.运行截图  在x86模拟器中运行的效果如下: 2.设计步骤  在上一节例子的基础上,只需要再增加下面的步骤即可.  (1)修改布局文件 将demo02_fragment.xml

  • Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案

    自从Android3.0引入了Fragment之后,使用Activity去嵌套一些Fragment的做法也变得更加流行,这确实是Fragment带来的一些优点,比如说:Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI,更重要的是Fragment解决了Activity间的切换不流畅,实现了一种轻量及的切换,但是在官方提供的android.support.v4包中,Fragment还是或多或少的存在一些BUG,今天就与大家分享一下这些BUG和解决方

  • Android Fragment多层嵌套重影问题的解决方法

    1解决bug的思想: //step1:当bug被发现(排除极低偶然性,单次性,开发工具导致) //step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug //step3:根据重现场景找到对应的代码 //step4:分析区域代码是否会影响到其他功能. //step5:做好数据的备份工作.(做好代码重构和恢复的准备,这样你才能肆无忌惮的捣鼓代码) //step6:修复代码的过程中,你会发现可能有多种解决方案.试着采取不影响主线的解决方案.以免影响到其他的代码. //step7:回顾

  • Android中ScrollView嵌套GridView显示不全解决方法

    Android中ScrollView嵌套GridView显示不全解决方法 由于ScrollView和GridView这两款控件都自带滚动条,一起使用GridView会显示不全 解决方法:自定义gridview 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • Android中listview嵌套scrollveiw冲突的解决方法

    一.使用网上用的动态改变listview高度的方法 该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常.所以使用限制较大. public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView) { //获取ListView对应

  • Fragment 多层嵌套方法调用问题的解决方案

    Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的.难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊.Fragment的出现就是为了解决这样的问题.你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生

  • 一个Activity中多个Fragment实现沉浸式状态栏的解决方法

    项目中遇到一个问题:一个Activity有多个Fragment,每个Fragment的沉浸式状态栏不一样,有的是红色,有的是黑色,有的是一张图片(图片的一部分在状态栏中显示),并且要要兼顾虚拟按键(常说的导航栏)遮盖住布局导致自己布局中的某些按钮功能被虚拟按键拦截的问题.网上没有找到完全符合的解决方案,现在说一下我自己的思路,因为自己知识有限,不知道有没有更好的方法,希望对一些人能有帮助.思路如下: 要解决某些型号的手机导航栏遮盖布局的问题,一般是在xml的根布局上加上属性: <span sty

  • Python多层嵌套list的递归处理方法(推荐)

    问题:用Python处理一个多层嵌套list ['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B'] 需求1)如何展开成一层? 需求2)如何删除重复的元素? 包括重复的list, 要考虑子list的重复元素删除后造成的子list重复 #!/usr/bin/env python # -*- coding: utf-8 -*- def unilist(l

  • 过滤Android工程中多余资源文件的解决方法

    本文以实例讲述了过滤Android工程中多余资源文件的解决方法,很有实用价值!具体描述如下: 很多开发人员在Android项目开发过程中经常会遇到这样的情况:界面开发人员发布了一个新版本的资源包,不过有的图片名称改了,有的图片删掉了,可是在实现的时候开发人员只是把新的资源覆盖到原来的资源文件夹中,随着版本的发布,在drawable或values中积累的无用资源越来越多,直到最后发布正式版的时候再想要删除这些多余的文件,于是不得不一个一个文件检查看是否有用,再决定要不要删除之. 有鉴于此,很有必要

  • Android Beam 文件传输失败分析与解决方法

    最近在修改Android7.0原生平台的一些bug,其中有关Android Beam传输文件的一些问题还是蛮多的.所以特地找时间总结下曾经踏过的坑. 1.传输的文件名包含中文时,导致传输失败 可能是由于Google未考虑到本地化差异,导致在传输中文文件名的文件时直接提示传输失败. packages\apps\Nfc\src\com\android\nfc\beam\MimeTypeUtil.java 其实,上面忘了说了,只是从文件管理器中进入Android Beam分享才会出现上面的问题.因为当

  • Android Activity 不能被截屏的解决方法

    在Activity 添加即可 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 以上这篇Android Activity 不能被截屏的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Android截屏方案实现原理解析 Android截屏分享功能 Android 下调试手机截屏的方法 Android 实现截屏功能的实例 android长截屏原理及实现代码 Andr

  • Android中的Bitmap序列化失败的解决方法

    之前写了个User类(实现了Serializable接口),类变量里有Bitmap类型的头像图片,Bitmap导致序列化不成功,报 "android.graphics.Bitmap"相关错误 解决方法之一:把Bitmap对象替换成byte数组来表示间接表示图片,在需要Bitmap的时候再讲byte数组转换成Bitmap对象.这是因为byte数组和Bitmap之间的可以转化,实现也比较方便. 附byte数组与Bitmap的相互转换方法: Bitmap转换成byte数组 private b

随机推荐