Fragment学习

1)生命周期与Activity的生命周期的关系

①Activity处于暂停状态时,Fragment也进入暂停状态

②Activity销毁时,Fragment也被销毁

③只有Activity处于Resume状态时,Fragment的生命周期可被独立操作。

2)onCreateView()与inflate()方法

△ 如果继承了ListFragment,则不需要重写onCreateView(),因为该方法默认返回一个ListView。

A. onCreateView()的参数

LayoutInflater inflater:从父容器传递进来的LayoutInflater

ViewGroup container:Fragment被添加进的父容器

Bundle savedInstanceState:onSavedInstanceState()方法返回的数据

B.inflate()的参数

int ResourceId:渲染的布局资源

ViewGroup container:当前布局的父容器

boolean attachToRoot:true为加入父容器,false为不加入。而系统已经将当前布局加入到父布局,若设为true,则父布局会将当前布局再添加进父布局一遍,所以一般为false。

3)将Fragment添加入Activity的方法


①在Actvity的布局文件中加入<fragment />

在<fragment/>中指定android:name=”包名.类名”,来指定需要实例化的Fragment。

       当系统创建Activity的布局,遇到<fragment />时,则实例化该Fragment,并调用该Fragment的onCreateView()方法返回一个View,则这个View将替代在Activity布局中的<fragment />。

②通过代码方式添加

此方法必须用到FragmentTransaction来添加Fragment。

FragmentTransaction ft =getFragmentManager().beginTransaction();

ft.add/replace(intResourceId, Fragment fragment, String tag);

第一个参数为放置Fragment的布局位置,可选择的添加,Fragment被嵌套在该布局之中。

第三个参数可选择的添加,用来标识Fragment的tag。

注意: add或者replace的方法中的参数没有只有Fragment的一个参数的情况。

4)在Activity中添加没有UI的Fragment

应用场景:???

①不需要实现onCreateView()的方法

②使用FragmentTransaction实例的add(Fragment fragment, String tag)添加进Activity,需要给执行后台的没有UI的Fragment设置一个tag,因为没有UI的Fragment没有资源ID。

5)Fragment与Activity通信

应用场景:

A. Fragment与Activity传递数据

B. Fragment与Fragment之间传递数据,由于Fragment之间不能直接通信,需要间接与Activity通信。

①Activity-->Fragment

在创建Fragment之后,将Fragment添加进Activity之前,调用fragment实例的setArguments(Bundle bundle)的方法,将数据传递到Fragment中。

②Fragment-->Activity

步骤:

A. 在Fragment中创建一个回调接口

B. 让包含此Fragment的Activity实现该接口

C. 在Fragment的onAttach(Activity activity)的方法中,得到实现了回调接口的Activity

D. 在Fragment中设置触发事件,来通过Activity调用实现的回调接口的方法

6)FragmentManager、FragmentTransaction与BackStack

① FragmentTransaction可调用addToBackStack(null),将已add进Activity的Fragment加入到BackStack中,在commit()之前调用。

② FragmentManager可调用popBackStack(),将在BackStack栈顶的Fragment弹出BackStack并销毁。这过程相当于用户点击返回键。

除此之外,FragmentManager还可通过addOnBackStackChangedListener()监听BackStack变化的情况。

7)Fragment获取Context对象

Fragment可通过getActivity()来获得其所附上的Activity。

注意:如果Fragment未附上Activity,或者Fragment生命周期结束从Activity分离时(一般是后者的情况),调用getActivity()返回的是null。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值