文档章节

Fragment整理

西米小娅
 西米小娅
发布于 09/26 17:56
字数 636
阅读 5
收藏 0

1、Fragment父类

    Fragment的父类有两个,分别为android.app.Fragment和android.support.v4.app.Fragment。建议使用android.support.v4.app.Fragment。因为此Fragment在所有的android版本中可以保持一致。

    在builid.gradle中添加了appcompat-v7库,v4也一起被添加了。所以不用重复添加

    注意:在使用<fragment>标签在布局中添加fragment的时候,一定要设置id属性,否则会出现问题

2、动态添加Fragment

    注意:fragment所要占据的位置,不可以使用<fragment>标签。否则无法达到想要的效果

    a、创建待添加的fragment实例

    b、获取FragmentManager,可以调用Activity对象的getSupportFragmentManager()

    c、开启一个事务,通过调用fragmentManager对象的beginTransaction()开启

    d、向容器中添加或者替换fragment,调用replace()

    e、提交事务。调用commit()

    具体的代码:

    /**
     * 
     * @param flag 是否将fragment添加到BackStack中
     *              以实现类似于Activity返回键,可以返回上一个Activity的效果
     * @param fragment 新fragment
     */
    public void replaceFragment(boolean flag,Fragment fragment){
        FragmentManager fragmentManager = this.getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_simple,fragment);
        if(flag) {
            fragmentTransaction.addToBackStack(null);
        }
        fragmentTransaction.commit();
    }

3、实现返回栈的效果

    对于效果的说明:

        类似于Activity,点击返回键,可以返回到上一个Activity

    具体的实现方法:

        在动态添加fragment后,调用fragmentTransaction.addToBackStack(null)即可

4、Fragment与Activity之间通信

    a、在Activity中,使用FragmentManager对象的fragmentManager.findFragmentById()方法即可

    b、在Fragment中,调用getActivity()获得Activity对象

    c、Fragment之间,可以调用getActivity()获得Activity对象,然后在通过Activity对象使用FragmentManager对象的fragmentManager.findFragmentById()

5、Fragment状态

    a、运行状态:Fragment与Activity都处于运行状态

    b、暂停状态:Activity处于暂停状态,或者是另一个未占满屏幕的Activity位于栈顶,Fragment也处于暂停状态

    c、停止状态:Activity处于停止状态,Fragment也处于停止状态。或者是Fragment被显示调用replace或remove方法,从Activity中移除,并调用了addToBackStack(null)。处于停止状态的Fragment对用户不可见,可能会被销毁。

    d、销毁状态:Activity被销毁,与之关联的Fragment也会被销毁。或者Fragment被显示调用replace或者remove方法,并没有调用addToBackStack(null)

6、Fragment的生命周期

    参考地址:https://developer.android.com/guide/components/fragments?hl=zh-cn

    

7、Fragment的数据保存和恢复

    保存数据:调用onSaveInstanceState()方法

    恢复数据:调用onCreate()、onCreateView()和onActivityCreated()方法

© 著作权归作者所有

共有 人打赏支持
西米小娅

西米小娅

粉丝 4
博文 70
码字总数 36082
作品 0
南京
私信 提问
加载中

评论(1)

lnwazg
lnwazg
😗
Android ViewPager 取消预加载

Android 新引入的Fragment加入了Viewpager这样的一个组件。至于该控件的功能在这里就不说了。这篇文章主要解决fragment viewpager预加载的问题。 默认的viewpager是会预先加载下一个fragmen...

geeksu
2014/03/19
0
3
TabLayout+ViewPager+Fragment实现页面切换(菜单底部或顶部)

父布局 使用 使用Tab自带的设置文字图片 适配器 fragment使用 关于切换事件的监听 其他小细节 1.talayout去掉下标 app:tabIndicatorHeight="0dp" 2.关于加载fragment时重复加载的问题,设置v...

东西南瓜西葫芦
2016/07/16
80
0
Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版

描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的; 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发; APP已经完善了一部分,现...

AnneHan
09/25
0
0
Fragment对比Activity - Android碎片介绍

Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面Android123介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在...

鉴客
2011/12/12
4.6K
0
Android Fragment —Tab 导航栏的实现

微信、QQ、微博底部等都有 Tab 标签选项,点击不同的标签可以切换的不同的界面。 步骤 1)描述主界面布局 activity_main.xml 代码如下: 说明:代码可能看着有点长,先看下布局之后的 outlin...

iBazinga
2016/11/25
68
0

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
24分钟前
2
0
Python程序员需要知道的30个技巧

1 直接交换两个数字位置 1x, y = 10, 202print(x, y)3x, y = y, x4print(x, y)5#1 (10, 20)6#2 (20, 10) 2 比较运算符的链接 1n = 102result = 1 < n < 203print(result)4# True5result = 1 ......

糖宝lsh
25分钟前
2
0
[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
36分钟前
5
0
Android :报错Your project path contains non-ASCII characters.

报错内容如下 Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See ht......

lanyu96
47分钟前
5
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
52分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部