`
VIP庚
  • 浏览: 220884 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于Fragment所需要知道的概念

 
阅读更多
  可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。
   Fragment可以通过动态加载和静态加载,这里静态加载就不介绍了(直接在xml文件里声明)
   动态加载是通过FragmentManager对Fragment进行了动态的加载
  FragmentManager fm = getFragmentManager();
        // 开启Fragment事务  
        FragmentTransaction transaction = fm.beginTransaction();
        MapFragment mapFragment = new MapFragment();
        // 使用当前Fragment的布局替代content的控件  
        transaction.replace(R.id.content, mapFragment);
        transaction.commit(); 


Fragment家族常用的API
Fragment常用的三个类:
android.app.Fragment 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~
a、获取FragmentManage的方式:
getFragmentManager() // v4中,getSupportFragmentManager
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
transaction.add()
往Activity中添加一个Fragment
transaction.remove()
从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
transaction.replace()
使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
transaction.hide()
隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
transaction.show()
显示之前隐藏的Fragment
detach()
会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
attach()
重建view视图,附加到UI上并显示。
transatcion.commit()//提交一个事务
注意:常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。
上述,基本是操作Fragment的所有的方式了,在一个事务开启到提交可以进行多个的添加、移除、替换等操作。
值得注意的是:如果你喜欢使用Fragment,一定要清楚这些方法,哪个会销毁视图,哪个会销毁实例,哪个仅仅只是隐藏,这样才能更好的使用它们。
a、比如:我在FragmentA中的EditText填了一些数据,当切换到FragmentB时,如果希望会到A还能看到数据,则适合你的就是hide和show;也就是说,希望保留用户操作的面板,你可以使用hide和show,当然了不要使劲在那new实例,进行下非null判断。
b、再比如:我不希望保留用户操作,你可以使用remove(),然后add();或者使用replace()这个和remove,add是相同的效果。
c、remove和detach有一点细微的区别,在不考虑回退栈的情况下,remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。那么二者怎么取舍使用呢?如果你的当前Activity一直存在,那么在不希望保留用户操作的时候,你可以优先使用detach。

例如 保留用户操作
先将所有需要的Fragment添加到activity中:
 fm = getFragmentManager();
        transaction = fm.beginTransaction();
        transaction.add(R.id.content, mapFragment);
        transaction.add(R.id.content, msgFragment);
        transaction.add(R.id.content, phoneFragment);
        transaction.commit();


然后当需要显示不同的Fragment时
 private void changeFragment(int checkedId) {
        transaction = fm.beginTransaction();
        transaction.hide(msgFragment);
        transaction.hide(mapFragment);
        transaction.hide(phoneFragment);
        switch (checkedId) {
            case R.id.msg_btn:
                transaction.show(msgFragment);
                transaction.commit();
                break;
            case R.id.map_btn:
                transaction.show(mapFragment);
                transaction.commit();
                break;
            case R.id.phone_btn:
                transaction.show(phoneFragment);
                transaction.commit();
                break;
        }
    }


这样所有的Fragment只会new一次  Fragment中的数据并不会消失


上面所写参照博客:http://blog.csdn.net/lmj623565791/article/details/37970961
1
2
分享到:
评论

相关推荐

    Android使用Fragment实现标签页

    Fragment的概念是从Android3.0开始引入的,直译为碎片、片段,目的是为不同屏幕大小的设备(手机、平板等)创建灵活动态的UI。诚如其名,你可以把Fragment当作是Activity的模块化组件,它拥有自己的生命周期和UI,接受...

    Fragment的传值问题

    Fragment,碎片,是Android 3.0之后加入的一个非常重要的概念。每个Fragment都有相应的Activity对它进行托管。一个Activity中可以有多个Fragment,这很自然的给大屏幕的适配提供了很便捷的方案。现在大家在开发中都必...

    Android开发实现Fragment监听返回键事件功能的方法

    前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析一下Fragment监听返回键事件的具体应用。 背景 项目要求用户注册成功后进入修改个人资料的页面,且不...

    Fragment演示

    Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像

    android fragment生命周期测试

    测试了下fragment生命周期,之前一直看别人的文章知道生命周期,但是过后就忘了,现在实际操作了一遍fragment生命周期还是很有意义的,加深了印象解决了自己概念模糊不清的地方。

    basic_activity-fragment.rar

    初学安卓,android studio的basic_activity中,增加两个fragment实现多个fragment切换页面效果。适合第一天学习安卓并且大致了解android studio一丁点概念

    Android Fragment使用之实例演示

    Fragment是Android honeycomb 3.0新增的概念,在如何使用Android Fragment中做了关于Fragment的详细介绍。本文则主要是通过实例的方式让大家更直观的了解Fragment的使用方法。  首先贴上实例的运行效果截图:  ...

    Android代码-轻量级代替Fragment的库

    Shatter是一个代替fragment来划分ui模块的库。它主要完成的工作是管理ui区块,并且能和activity保持完全相同的生命周期,没有任何学习成本。 Shatter对于单页面多ui模块的结构有着很好的支持,非常适合用来降低复杂...

    Android中你可能不知道的Fragment妙用

    自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。下面这篇文章主要给大家分享了关于Android中你可能不知道的Fragment妙用,对大家具有一定的参考学习价值,需要的朋友可以参考下。

    详解Android中Fragment的两种创建方式

    两个概念:Fragment、宿主 fragment的生命周期直接受其宿主activity的生命周期的影响。例如,一旦activity被暂停,它里面所有的fragment也被暂停,一旦activity被销毁,它里面所有的fragment也被销毁。 Androi

    Android中fragment与activity之间的交互(两种实现方式)

    之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文《详解Android中Fragment的两种创建方式》,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何...

    Android app开发中的Fragment入门学习教程

    在Android3.0上开始引入了一个新概念叫Fragment。它有自己的布局文件,可以作为组件排布,也可以相互组合去实现不同的布局显示。使用Fragment可以重复利用代码,并且可以满足不同设备尺寸的需求。Fragment不能单独...

    Android Fragment(动态,静态)碎片详解及总结

    一.Fragment的相关概念(一)Fragment的基础知识  Fragment是Android3.0新增的概念,中文意思是碎片,它与Activity十分相似,用来在一个 Activity中描述一些行为或一部分用户界面.使用多个Fragment可以在一个单独的...

    【安卓移动应用】主页面中嵌入Fragment

    基本概念:Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的...

    Android 使用Fragment模仿微信界面的实例代码

    自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其目的是为了解决不同屏幕分辩率的动态和...下面通过本文给大家分享Android 使用Fragment模仿微信界面的实例代码,需要的的朋友参考下吧

    Android App中使用ViewPager+Fragment实现滑动切换效果

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,...另外一个概念就是Fragment和FragmentActivity,Fragment是一个特殊的类,有着和activity一致的生命周期和view一致的界面,也就是

    浅谈Android App开发中Fragment的创建与生命周期

    主要介绍了Android App开发中Fragment的创建与生命周期,文中详细地介绍了Fragment的概念以及一些常用的生命周期控制方法,需要的朋友可以参考下

    Android应用开发中使用Fragment的入门学习教程

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

    Android开发教程之Fragment定义、创建与使用方法详解【包含Activity通讯,事务执行等】

    主要介绍了Android开发教程之Fragment定义、创建与使用方法,详细介绍了Fragment的概念、功能、定义、创建及使用方法,包括Fragment与Activity通讯,Fragment事务执行及Fragment应用示例等,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics