Android 02--Fragment

    照常,我们先看看整体的章节结构/目录


知识结构图

    由于Fragment有生命周期(依赖于Activity生命周期),使用频率不输于4大组件,可灵活加载到Activity。

1.加载方式

1.1静态加载

<fragment

    android:name="com.example.myfragment.MyFragment" 

    android:id="@+id/myfragment_1" 

    android:layout_width="wrap_content" 

    android:layout_height="wrap_content"/>

1.2动态加载

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

//将FragmentA从容器中移除掉,减少内存的消耗

fragmentTransaction.replace(R.id.fragment_layout,new FragmentB());

fragmentTransaction.commit();

    通常情况下我们开发应用最常见的使用情况是TabLayout+ViewPager+Fragment的使用方式,这就涉及到两个常用的适配器的使用,一个是FragmentPagerAdapter,另外一个是FragmentStatePagerAdapter,那么它们之间有什么区别呢?其实很简单,FragmentPagerAdapter适用于页面较少的情况,而FragmentStatePagerAdapter适用于页面较多的情况。

2.生命周期

    Fragment的生命周期中,主要是依赖于Activity的生命周期,在Fragment创建的时候进行遍历,但是多数只调用一次,目前常用YoKeyword/Fragmentation封装的supportFragment进行使用,其中封装了onHiddenChanged等用于fragment显示/隐藏进行回调。具体的生命周期场景,详见参考博客

3.Fragment的通信

Fragment-》Activity:可以通过getActivity()进行强转,然后调用方法

Activity-》Fragment:可以通过setArgment,或者直接回调Fragment的方法,但是一般采用前者,因为很多时候具有时机问题

Fragment-》Fragment:可以通过中转方式,采用上述两个消息传递的结合

    但是,通常最常用的目前采用广播(目前多采用RXBus)进行消息传递(强烈推荐),避免了不少数据时机问题   

4.Fragment的切换方式

通常,我们都会在一个Activity里面具有多个fragment进行切换,切换的方式主要有:    

    4.1 add()&remove():就是添加和移除,我们常见的replace就是采取这种方式,内部就是先remove,然后add。这样每次都会创建新的Fragment实例;

    4.2 show()&hide():将其缓存起来,之后通过显示隐藏,该方式常用于频繁切换,但是数目不多时,避免了实例的频繁创建和部分缓存数据的丢失;

    4.3 attch()&detach():Fragment实例进行缓存,但是每次将布局视图丢弃,调用onCreateView()来重绘视图,因此每次Fragment.isAdded()方法将返回false(通过view的parent的removeView()方法将view和parent的关联删除后返回),此方式极少使用。

5.Fragment的懒加载

    为了在界面加载成功后再进行数据获取,避免缓存压力,有时候需要进行懒加载的操作。但是结合ViewPager使用中,FragmentPagerAdapter里最少缓存两个Fragment,mViewPager.setOffscreenPageLimit(0);/设置缓存view 的个数,是无效的,因为它里面有判断,最小为1。如果为了完全达成懒加载状态,则需要另一个策略。

    首先,fragment里有一个方法优先于OnCreat()回调方法——setUserVisibleHint ,我们可以在这个方法进行判断和数据拉取,但是此时有容易遇到UI未加载。所以一般我们可以在onStart()方法里采用if(getUserVisibleHint()) 进行判断和加载数据。

---------------------

参考博文:

作者:ClAndEllen  来源:CSDN   题目:Android面试系列文章2018之Android部分Fragment篇

链接:https://blog.csdn.net/clandellen/article/details/79269680

---------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容