Android碎片Fragment详讲(1)

Fragment

Fragment创建的步骤

1、        继承fragment一定是V4包下的

2、        有且只有一个无参的构造方法

3、        如果Fragment需要显示界面,需要重写onCreateView方法

4、        指定布局资源,或者创建布局,返回即可

静态创建fragment时:

需要指定fragment的class属性 以及给Fragment加上id或者tag属性

 

在onCreateView内部,可以设置控件的内容,开启线程,连接网络.。

Fragment的作用

1、        简化重复的开发工作,将内容与工程整合,最终提供功能的重用性

2、        体改内聚,减少耦合成都度

3、        Fragment用于布局界面的切分和优化,减少布局的重复,提高开发的效率。

通常tab样式的切换,,使用RadioGroup。

 

主流的底部tab切换页面的设计方式:就是中间一个FrameLayout 底部RadioGroup 切换时,替换FrameLayout中的fragment

每一个Fragment可以通过两种方式添加到activity中

1)        使用fragment标签直接添加到activity

2)    使用代码来添加使用两个类,Frgamentmanager SupportFragmentManager

3)    内部添加删除替换隐藏显示,需要manager.beginTransaction()

4)    事物每次操作之前必须重启,不允许使用成员变量的方式。

Fragment的生命周期:

1、        Fragment的声明周期和activity的声明周期相似

2、        以为Fragment依赖于Activity显示,那么当Activity发生生命周期变化的时候,Fragment同样发生相同的变化,包括

1)        onCrate

2)        onStart

3)        onResume

4)        onPause

5)        onStop

6)        onDestroy

Fragment还有一些声明周期

onAttach()执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,代表绑定的Activity,这时候你可以执行诸如mActivity = activity的操作。
onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
onCreateView()初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。
onActivityCreated()执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。
onStart():执行该方法时,Fragment由不可见变为可见状态。
onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
onSaveInstanceState()保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。
onStop():执行该方法时,Fragment完全不可见。
onDestroyView()销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach()解除与Activity的绑定。在onDestroy方法之后调用。

生命周期:



当Activity启动后,首先执行activity的onCreate方法,之后执行Fragment的onAttch方法,当进行replace方法是,执行onDetachon方法。


启动APP的声明周期变化:


当fragment进行切换的时候,生命周期的变化:


首先是两一个Fragment先与Activity进行连接,执行onAttach方法,

之后Fragment执行onCraete方法,

之前的fragment进入到不可见状态onPause,之后之前的Fragment onStop 销毁界面,之后销毁,之后与Activity失去联系,

此时先的Fragment创建View视图,执行onCrateView方法,之后onActivityCrate方法,start,进入活动状态onResuume状态。

点击back键:

Fragment  执行onPuase不可见onStop  ondestroyView   ondestroy onDetach方法。


这个界面的时候,执行onPause  onstop

 

恢复之后:Fragment onStart   Activity onstart  Activity onResume   Fragment onResume

 

 

 

参考:借鉴于网络

生命周期变化 : 切换到该Fragment

 

05-21 14:26:35.095:D/FragmentDemo(7649): onAttach

 05-21 14:26:35.095: D/FragmentDemo(7649):onCreate

 05-21 14:26:35.095: D/FragmentDemo(7649):onCreateView

 05-21 14:26:35.100: D/FragmentDemo(7649):onActivityCreated

 05-21 14:26:35.120: D/FragmentDemo(7649):onStart

 05-21 14:26:35.120: D/FragmentDemo(7649):onResume

 

屏幕灭掉:

 

05-21 14:27:35.185:D/FragmentDemo(7649): onPause

 05-21 14:27:35.205: D/FragmentDemo(7649):onSaveInstanceState

 05-21 14:27:35.205: D/FragmentDemo(7649):onStop

 

屏幕解锁

 

05-21 14:33:13.240:D/FragmentDemo(7649): onStart

 05-21 14:33:13.275: D/FragmentDemo(7649):onResume

 

切换到其他Fragment:

 

05-21 14:33:33.655:D/FragmentDemo(7649): onPause

 05-21 14:33:33.655: D/FragmentDemo(7649):onStop

 05-21 14:33:33.660: D/FragmentDemo(7649):onDestroyView

 

切换回本身的Fragment:

 

05-21 14:33:55.820:D/FragmentDemo(7649): onCreateView

 05-21 14:33:55.825: D/FragmentDemo(7649):onActivityCreated

 05-21 14:33:55.825: D/FragmentDemo(7649):onStart

 05-21 14:33:55.825: D/FragmentDemo(7649):onResume

 

回到桌面

 

05-21 14:34:26.590:D/FragmentDemo(7649): onPause

 05-21 14:34:26.880: D/FragmentDemo(7649):onSaveInstanceState

 05-21 14:34:26.880: D/FragmentDemo(7649):onStop

 

 

 

回到应用

05-21 14:36:51.940:D/FragmentDemo(7649): onStart

 05-21 14:36:51.940: D/FragmentDemo(7649):onResume

 

退出应用

05-21 14:37:03.020:D/FragmentDemo(7649): onPause

 05-21 14:37:03.155: D/FragmentDemo(7649):onStop

 05-21 14:37:03.155: D/FragmentDemo(7649):onDestroyView

 05-21 14:37:03.165: D/FragmentDemo(7649):onDestroy

05-21 14:37:03.165:D/FragmentDemo(7649): onDetach

如果替换或者删除一个fragment然后然用户可以导航到上一个fragment,必须在调用commit()方法之前调用addToBackStack()方法添加到回退栈,如果你把这个fragment添加到了回退站栈,在提交之后这个fragment会是被Stop而不是destroy,如果用户导航到这个fragment,这个fragment将会被Restart而不是重新创建,如果没有吧它添加到回退栈,则在删除或者替换的时候它被Destroyed。

与其他fragment之间的交互:

     两个单独的fragment之间是不应该进行通信的,应该使用他们所在的Activity作为沟通的纽带

     为了实现两个Fragment的交互,您可以在Fragment中定义一个接口,然后再这个接口中定义一个方法,在Fragment的onAttach()方法中调用这个接口中的方法。然后让Activity实现这个方法来完成Activity和Fragment之间的通信。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值