Fragment-基础梳理

网上很多关于Fragment 的基础详解,Fragment 对于我们也不陌生了,今天来整理一下Fragment的用法等。

1.生命周期

可以看到Fragment比Activity多了几个额外的生命周期回调方法:


Fragment-基础梳理_第1张图片

onAttach(Activity)

当Fragment与Activity发生关联时调用。

onCreateView(LayoutInflater, ViewGroup,Bundle)

创建该Fragment的视图

onActivityCreated(Bundle)

当Activity的onCreate方法返回时调用

onDestoryView()

与onCreateView想对应,当该Fragment的视图被移除时调用

onDetach()

与onAttach相对应,当Fragment与Activity关联被取消时调用


2.动态用法

1.创建 FragmentManager

2.获取FragmentTransaction

3.动态替换fragment

4. comment

FragmentManager fm = getFragmentManager();

FragmentTransaction transaction = fm.beginTransaction();

mFragment =MyFragment();

transaction.replace(R.id.id_content, mFragment );

transaction.commit();


3.具体方法介绍

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()//提交一个事务

addToBackStack(String)

注意replace()方法时,再调用 addToBackStack(), 将当前的事务添加到了回退栈,所以Fragment实例不会被销毁,但是视图层次依然会被销毁,即会调用onDestoryView和onCreateView


4.通讯

a、如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法

b、如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。

c、在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。


5.回收时出现的问题

当app长期处于后台,或者屏幕转换的时候,可能会出现多个Fragment重叠,原因是app重新启动,调用onCreate 方法进而触发重新add多一个Fragment,处理方法就是在之前做判断即可。


DialogFragment->https://blog.csdn.net/androidstarjack/article/details/73824885

你可能感兴趣的:(Fragment-基础梳理)