简易记账开发笔记之Fragment(前传)
2016-11-23 12:19
393 查看
本文已经同步到个人公众号,欢迎关注更多
Fragment译文为碎片,理解为嵌套在Activity中可重复使用一部分,典型定义为用户界面的一部分。Fragment必须嵌套在Activity中,不可以单独使用。Fragment的行为和Activity的行为很相似,Fragment对旧版本具有支持库。
在Activity中使用Fragment
在Activity中使用Fragment有两种方式:使用java代码动态创建和使用XML静态创建
在Activity中使用一个“支持”的Fragment之前,我们此需要确保我们的Activity继承自FragmentActivity或者AppCompatActivity,两者都提供了一个对所有Android版本支持的fragment manager。
例如:
静态Fragment嵌套在父Activity布局中使用,如下
小结:静态与动态的区别就是:静态的fragment是固定,不可以替换,而动态Fragment是可以通过FragmentTransaction动态代替,后文会讲解。在java中使用动态加载Fragment是通过FragmentManager。FragmentManager和FragmentTransaction这两个类允许我们在程序运行时在布局动态的加载、移除和替换Fragment。例如:
小结:在更多的情况下,推荐使用动态加载Fragment,因为具有很大灵活性。
Fragment的生命周期
像Activity一样,Fragment有很多的重写方法是与它的生命周期相关联的。下面介绍它们的方法。
onAttach():当Fragment与Activity关联时被调用,即在Activity创建Fragment实例时刻。
onCreate():被调用于初始化Fragment数据的相创建工作。
onCreateView():用于Fragment加载视图。
onViewCreated():在onCreateView()之后被调用,确保Fragment的根视图不为空,以及所有的视图的初始化都发生该方法,如视图的查找,监听的设置。
onActivityCreated():当宿主Activity完成onCreate()方法后被调用。
onStart():当Fragment准备好展示在屏幕时被调用,即此时屏幕还没有出现界面之前,还不可以与用户交互,不可获得焦点。
onResume():分配“昂贵”的资源,如位置的标记、传感器的更新,等等,此方法调用后,界面以处于可见状态,此时,Fragment是处于运行状态,可以和用户交互的。
onPause():释放“昂贵”的资源,提交一些更改。
onDestroyView():当Fragment即将被销毁时调用,此时Fragment还存在;
onDestroy():当Fragment不再被使用时调用。
onDetach():但onDetach()不再关联宿主Activity时被调用。
Fragment的生命周期到此结束(真累,这么长的生命周期)。
用图理解人生吧
小结:几乎所有的Fragment都要重写onCreateView()方法来加载视图,而onCreate()和onActivityCreated则分别用来初始化数据和在宿主Activity加载完onCreate()之后设置一些数据。
看看例子:
获取Fragment实例的三种方法
1、静态加载在xml的Fragment可以通过调用FragmentManager的findFragmentById()方法获得。
2、动态加载的的Fragment可以通过调用FragmentManager的findFragmentByTag()方法获得。
3、在使用FragmentPagerAdapter的ViewPager中获得通过调用getRegisteredFragment()方法获得。
通过findFragmentById
通过findFragmentByTag
通过getRegisteredFragment
Fragment的数据交流
Fragment一般通过它直接的父Activity进行通信,通过它们的宿主Activity的协调与其它Activity或Fragment进行通信,而不是在Fragment之间或者在Fragment与其它Activity之间直接进行数据交流。
例外的情况:就是对话框Fragment(dialog fragments)和嵌套Fragment(netstd
child fragments)两者。两者的共同点都是嵌套在Fragment内,作为Fragment的子类,所以允许它们与父类(Fragment)通信。(前者没用过)
Fragment与Activity通信方式有三种方式:
1、Bndle-Activity可以创建一个fragment实例并设置arguments。
2、Methods-Activity可以通过fragment的实例调用它的方法。
3、Listener-Fragment可以通过接口回调一个监听事件。
总而言之:(太长了,不想翻译,看图)
Android不许我们创建带有参数的构造器,所以平常我们都是使用它的默认构造函数,当要传递参数给Fragment,那我们通常的做法就是创建一个静态方法newInstance.
前面说到,要与Activity通信有三种方法,其中之一就定义内部接口,让宿主Activity去实现该接口。
一些情况下,我们的Fragment要在ActionBar中使用菜单选项,那么我们就像在Activity中使用一样 ,直接在Fragment中增加onCreateOptionsMenu方法。
可以看到比Activity多了一个MenuInflater参数,在此时还没办法在Fragment使用菜单选项,需要在Fragment的onCreate方法增加setHasOptionMenu(true)来通知Fragment。
响应菜单选中
注意:该方法仅在宿主Activity不消耗事件的情况下才会被调用。
长按关注,更多精彩哦
Fragment译文为碎片,理解为嵌套在Activity中可重复使用一部分,典型定义为用户界面的一部分。Fragment必须嵌套在Activity中,不可以单独使用。Fragment的行为和Activity的行为很相似,Fragment对旧版本具有支持库。
在Activity中使用Fragment
在Activity中使用Fragment有两种方式:使用java代码动态创建和使用XML静态创建
在Activity中使用一个“支持”的Fragment之前,我们此需要确保我们的Activity继承自FragmentActivity或者AppCompatActivity,两者都提供了一个对所有Android版本支持的fragment manager。
例如:
静态Fragment嵌套在父Activity布局中使用,如下
小结:静态与动态的区别就是:静态的fragment是固定,不可以替换,而动态Fragment是可以通过FragmentTransaction动态代替,后文会讲解。在java中使用动态加载Fragment是通过FragmentManager。FragmentManager和FragmentTransaction这两个类允许我们在程序运行时在布局动态的加载、移除和替换Fragment。例如:
小结:在更多的情况下,推荐使用动态加载Fragment,因为具有很大灵活性。
Fragment的生命周期
像Activity一样,Fragment有很多的重写方法是与它的生命周期相关联的。下面介绍它们的方法。
onAttach():当Fragment与Activity关联时被调用,即在Activity创建Fragment实例时刻。
onCreate():被调用于初始化Fragment数据的相创建工作。
onCreateView():用于Fragment加载视图。
onViewCreated():在onCreateView()之后被调用,确保Fragment的根视图不为空,以及所有的视图的初始化都发生该方法,如视图的查找,监听的设置。
onActivityCreated():当宿主Activity完成onCreate()方法后被调用。
onStart():当Fragment准备好展示在屏幕时被调用,即此时屏幕还没有出现界面之前,还不可以与用户交互,不可获得焦点。
onResume():分配“昂贵”的资源,如位置的标记、传感器的更新,等等,此方法调用后,界面以处于可见状态,此时,Fragment是处于运行状态,可以和用户交互的。
onPause():释放“昂贵”的资源,提交一些更改。
onDestroyView():当Fragment即将被销毁时调用,此时Fragment还存在;
onDestroy():当Fragment不再被使用时调用。
onDetach():但onDetach()不再关联宿主Activity时被调用。
Fragment的生命周期到此结束(真累,这么长的生命周期)。
用图理解人生吧
小结:几乎所有的Fragment都要重写onCreateView()方法来加载视图,而onCreate()和onActivityCreated则分别用来初始化数据和在宿主Activity加载完onCreate()之后设置一些数据。
看看例子:
获取Fragment实例的三种方法
1、静态加载在xml的Fragment可以通过调用FragmentManager的findFragmentById()方法获得。
2、动态加载的的Fragment可以通过调用FragmentManager的findFragmentByTag()方法获得。
3、在使用FragmentPagerAdapter的ViewPager中获得通过调用getRegisteredFragment()方法获得。
通过findFragmentById
通过findFragmentByTag
通过getRegisteredFragment
Fragment的数据交流
Fragment一般通过它直接的父Activity进行通信,通过它们的宿主Activity的协调与其它Activity或Fragment进行通信,而不是在Fragment之间或者在Fragment与其它Activity之间直接进行数据交流。
例外的情况:就是对话框Fragment(dialog fragments)和嵌套Fragment(netstd
child fragments)两者。两者的共同点都是嵌套在Fragment内,作为Fragment的子类,所以允许它们与父类(Fragment)通信。(前者没用过)
Fragment与Activity通信方式有三种方式:
1、Bndle-Activity可以创建一个fragment实例并设置arguments。
2、Methods-Activity可以通过fragment的实例调用它的方法。
3、Listener-Fragment可以通过接口回调一个监听事件。
总而言之:(太长了,不想翻译,看图)
Fragment with Arguments(传递参数给Fragment)
Android不许我们创建带有参数的构造器,所以平常我们都是使用它的默认构造函数,当要传递参数给Fragment,那我们通常的做法就是创建一个静态方法newInstance.
Fragment Listener
前面说到,要与Activity通信有三种方法,其中之一就定义内部接口,让宿主Activity去实现该接口。
ActionBar Menu Items and Fragments(在Fragment中使用ActionBar的Menu)
一些情况下,我们的Fragment要在ActionBar中使用菜单选项,那么我们就像在Activity中使用一样 ,直接在Fragment中增加onCreateOptionsMenu方法。可以看到比Activity多了一个MenuInflater参数,在此时还没办法在Fragment使用菜单选项,需要在Fragment的onCreate方法增加setHasOptionMenu(true)来通知Fragment。
响应菜单选中
注意:该方法仅在宿主Activity不消耗事件的情况下才会被调用。
长按关注,更多精彩哦
相关文章推荐
- 简易记账开发笔记之Fragment(后续)
- 简易记账开发笔记之GridLayout
- WEB 开发前传——js笔记
- Android应用开发学习笔记之Fragment
- Android开发总结笔记 Fragment(下) 1-2-12
- Git开发笔记——搭建Git简易高效服务器
- android开发笔记之网络编程—简易新闻客户端
- 学习笔记:使用Web Service Software Factory开发简易留言本服务以及Mobile调用实现-1.创建Service
- 安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微
- CriminalIntent项目开发笔记(四)----使用fragment argument
- CriminalIntent项目开发笔记(三)----ListFragment的使用
- android开发笔记————简易随机器的制作
- Android应用开发学习笔记之Fragment
- 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)
- 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)
- Android开发总结笔记 Fragment(上) 1-2-11
- WEB 开发前传——js笔记
- Android 开发笔记 第三季 FragmentPagerAdapter
- 安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)
- Android开发笔记之简易音乐播放器