Fragment相关知识点

来源:互联网 发布:搜狗浏览器软件 编辑:程序博客网 时间:2024/06/06 01:16


一、fragment为什么被称为第五大组件

Android四大组件包括,Activity、Service、Broadcast Receiver、Content Provider,而Fragmnet不仅具有自己的生命周期,而且使用的频率也很突出,它能够灵活的加载到Activity中去,所以也有称Fragment为第五大组件的说法。


二、Fragment加载到Activity的方式

1、静态加载,将Fragment通过<fragment>标签加入到xml文件中。从而实现静态加载Fragment到Activity中去。

2、动态加载步骤:

1获取FragmentManager对象,通过FragmentManagerbeginTransaction()方法获取FragmentTransaction对象。

2调用add()方法,添加Fragment对象

3调用FragmentTransaction的commit()方法,提交事务


三、FragmentPagerAdapter和FragmentStatePagerAdapter的区别

我们主要关注他们的destroyItem的方法,我们先看源码再看结论:

FragmentPagerAdapter

@Override    public void destroyItem(ViewGroup container, int position, Object object) {        if (mCurTransaction == null) {            mCurTransaction = mFragmentManager.beginTransaction();        }        if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object                + " v=" + ((Fragment)object).getView());        mCurTransaction.detach((Fragment)object);    }
在FragmentPagerAdapter 最后他是调用了FragmentTransaction的detach方法,它只是分离了Fragment和Activity,并没有对Fragment进行回收内存


FragmentStatePagerFragment

  @Override    public void destroyItem(ViewGroup container, int position, Object object) {        Fragment fragment = (Fragment) object;        if (mCurTransaction == null) {            mCurTransaction = mFragmentManager.beginTransaction();        }        if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object                + " v=" + ((Fragment)object).getView());        while (mSavedState.size() <= position) {            mSavedState.add(null);        }        mSavedState.set(position, fragment.isAdded()                ? mFragmentManager.saveFragmentInstanceState(fragment) : null);        mFragments.set(position, null);        mCurTransaction.remove(fragment);    }
FragmentStatePagerFragment在destroyItem的方法中,它调用了FragmentTransaction的remove方法,对Fragment进行了销毁和回收内存。

所以我们来总结一下面试如何回答这个问题:

FragmentPagerAdapter适用于页面较少的情况,它的destroItem方法只是对Fragment和Activity进行分离,没有对Fragment回收内存,而FragmentStatePagerAdapter适用与页面较多的情况,它会调用remove方法对Fragment回收内存。


四、Fragment生命周期:


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

onCreate

初次创建Fragment调用,创建Fragment,此时Fragment还未创建完成
onCreateView
创建该Fragment的视图

onViewCreated

在Fragment被绘制后,调用此方法,可以初始化控件资源。

onActivityCreated
当Activity的onCreate方法返回时调用

onStart

在Activity的onStart调用后调用,表示Fragment可见了

onResume

在Activity的onResume调用后调用Fragment的onResume方法,此时Fragment可与用户交互

onPause

表示Fragment不可与用户交互

onStop

表示Fragment不可见 

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

onDestory

表示Fragment被销毁
onDetach
与onAttach相对应,当Fragment与Activity关联被取消时调用


五、Fragment通信

1、在Fragment中调用Activity方法

通过getActivity获取Activity的实例,调用其方法

2、在Activity中调用Fragment方法

使用接口回调的方式调用。

3、在Fragment调用其它Fragment的方法

通过getActivity方法获取activity的实例,然后调用findFragmentById的方法获取Fragment对象,调用其方法。



Android面试相关视频资料可加群392626956免费索取。

原创粉丝点击