Fragment简介
来源:互联网 发布:网络研修中的困惑 编辑:程序博客网 时间:2024/05/23 02:13
强烈建议使用support-v4库中的Fragment
因为它可以让Fragment在所有的Android系统版本中保持功能一致性。比如在Fragment中嵌套使用Fragment,这个功能是Android4.2系统中才开始支持的,如果使用系统内置的Fragment,那么在Android4.2系统之前的设备运行程序就崩溃。
将Fragment加入到返回栈中:addToBackStack(null),可以接收一个名字用于描述返回栈的状态,一般传入null即可
Activity中获取Fragment对象的方式:
通过FragmentManager对象的findFragmentById()方法即可获取到Fragment实例。
Fargment中获取Activity时,可以通过调用getActivity()方法来获取相关的Activity实例
两个Fragment之间如何通讯,可以通过Activity作为中间媒介来实现。
Fragment的生命周期
- 1.运行状态:当Fragment是可见状态,同时所依附的Activity正处于运行状态时,该Fragment也处于运行状态
- 2.暂停状态:当一个活动进入暂停状态时,与它相关的Fragment就会进入到暂停状态
- 3.停止状态:当活动进入停止状态时,与之关联的Fragment也会进入到停止状态,或者通过调用FragmentTransaction的remove(),replace()方法将Fragment从活动中移除,但如果在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。停止状态的Fragment对于用户是完全不可见的,有可能被系统回收的
- 4.销毁状态:Activity销毁时,Fragment 也会销毁。或者调用 Fragmenttransaction 的 remove(),replavce()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态
Fragment 的回调方法
- onAttach()。当碎片和活动建立关联的时候调用
- onCreateView()。为fragment创建视图(加载布局)时调用
- onActivityCreated()确保与 Fragment 相关的 Activity创建完毕后调用
- onDestroyView()当与Fragment关联的仕途被移除的时候调用
- onDetach()当Fragment与Activity解除关联的时候调用
Fragment的生命周期图
当 Fragment被移除或内存不足悲销毁时,可以通过 onSaveInstanceState() 方法来保存数据,在onCreate(),onState(),onActivityCreated() 方法中获取到,它们都包含一个Bundle类型的saveIntanceState参数。
### Android layout文件夹限定符
| | xlarge | 专给超大屏设备使用的资源 |
| |ldpi| <120dpi |
| |mdpi| 120dpi~160dpi |
| 像素 |hdpi| 160dpi~240dpi |
| |hdpi| 240dpi~320dpi |
| |hdpi| >320dpi |
| 方向 |land| 横屏设备的资源 |
| |port| 竖屏设备的资源 |
### 最小宽度限定符号
我们可以设定一个最小宽度,当设备宽度大于这个数值时,将会使用该layout。例如:layout-sw600dp当设备宽度大于600dp时就会使用该目录下的资源文件,否者就会使用默认的layout下的资源文件。
多个Fragment切换保存状态方法
transaction = manager.beginTransaction(); Bundle bundle = new Bundle(); bundle.putString("title", newsContent); contentFragment.setArguments(bundle); transaction.hide(listFragment);//使用隐藏保留View状态,不回重新调用onCreateView()方法 transaction.add(R.id.fragment, contentFragment); transaction.addToBackStack(null); transaction.commit();
当按back键时,会结束掉contentFragment,listFragment将重新展显出来,不回重新调用listFragment的onCreate(),onStart(),onCreateView()方法。如果不使用hide方法,使用replace方法,则listFragment的onDestroyView()方法将被调用,当在contentFragment中按back键时,listFragment将重新展示出来,回依次调用onCreateView(),onStart()方法。如果多次调用add,且前一个仍未隐藏则同时显示两个Fragment
Fragment常用方法
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上并显示。
注意事项
- 1.比如:我在FragmentA中的EditText填了一些数据,当切换到FragmentB时,如果希望会到A还能看到数据,则适合你的就是hide和show;也就是说,希望保留用户操作的面板,你可以使用hide和show,当然了不要使劲在那new实例,进行下非null判断。
- 2.再比如:我不希望保留用户操作,你可以使用remove(),然后add();或者使用replace()这个和remove,add是相同的效果。
- 3.remove和detach有一点细微的区别,在不考虑回退栈的情况下,remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。那么二者怎么取舍使用呢?如果你的当前Activity一直存在,那么在不希望保留用户操作的时候,你可以优先使用detach。
- 4.Fragment 与Activity交互降低耦合,通过预留接口的方式来降低耦合,对于点击事件调用相应的接口,执行对应的操作。在activity中实现此接口完成,实现对Fragment的处理逻辑。这样可以解除与指定Activity之间的耦合,从而提高Fragment的复用性。
- 5.防止屏幕旋转创建多个Fragment 添加判断:if(savedInstanceState == null) 即可
hide 和add组合 与 replace 作用不相同
保留列表状态的通用写法
将FragmentA hide(),然后通过replace来添加新的FragmentB,这样在FragmentB中点击返回键时,Fragment页面状态得到保留。
value 限定符
value-large,value 也可以用限定符来修饰,通过手机尺寸不同来加载不同的的value数据。
FragmentDialog代替AlertDialog
使用FragmentDialog的重要原因:
传统的new AlertDialog在屏幕旋转时,第一不会保存用户输入的值,第二还会报异常,因为Activity销毁前不允许对话框未关闭。而通过DialogFragment实现的对话框则可以完全不必考虑旋转的问题。
- Fragment简介
- Fragment简介
- Fragment简介
- Fragment简介
- fragment简介
- Fragment简介
- Fragment简介
- android Fragment简介
- Fragment生命周期简介
- Fragment之简介
- android碎片Fragment简介
- Android Fragment(一)---简介
- Android Fragment简介
- Android Fragment简介
- ViewPager和Fragment简介
- Fragment的用法简介
- Android Fragment简介
- Android Fragment简介
- 对‘sqrt’未定义的引用 collect2: error: ld returned 1 exit status
- Spring事务之三(DriverManagerDataSource)
- jsp 模拟按钮,点击button,链接到a标签,是a标签的地址跳转
- C++对象模型-简述c++对象的内存布局
- HTML5之文档结构标签
- Fragment简介
- 代词的用法
- 用R做数据分析必须的4个理由
- Spring事务之四(Spring声明式事务基本配置)
- css盒模型分析
- 大规模分布式存储系统读书笔记前三章(未完)
- 计算器(难度系数:3颗星)
- 装Ubuntu系统制作U启动
- 怎样衡量一份工作是否值得坚持?