Fragment知识小结
程序员文章站
2022-04-08 16:43:06
...
前言:
本博客是对fragment基本面试知识的一个小结,有需要对fragment更深入详细的推荐鸿洋大神的博文 Android Fragment 真正的完全解析。该博客复制参考了Hensen_,感谢原文博主的分享,在前人的基础上做了补充,方便后期知识的回顾。
1、Fragment为什么被称为第五大组件
Fragment比Activity更节省内存,其切换模式也更加舒适,使用频率不低于四大组件,且有自己的生命周期,而且必须依附于Activity。
2、Activity创建Fragment的方式
-
静态创建:
<fragment android:id="@+id/my_fragment" android:name="com.example.ling.myreview.MyFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
-
动态创建
FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.fl_content, new MyFragment()); ft.commit();
3、FragmentPageAdapter和FragmentPageStateAdapter的区别
[1] FragmentPageAdapter:
在每次切换页面的的时候,是将Fragment进行分离,适合页面较少的Fragment使用以保存一些内存,对系统内存不会多大影响.
-
源码:
@Override public void destroyItem(ViewGroup container, int position, Object object) { if (mCurTransaction == null) { mCurTransaction = mFragmentManager.beginTransaction(); } // 我们可以看到每次切换Fragment时,Fragment会detach掉,并不会销毁。 mCurTransaction.detach((Fragment)object); }
[2] FragmentPageStateAdapter
在每次切换页面的时候,是将Fragment进行回收,适合页面较多的Fragment使用,这样就不会消耗更多的内存.
-
源码
@Override public void destroyItem(ViewGroup container, int position, Object object) { Fragment fragment = (Fragment) object; if (mCurTransaction == null) { mCurTransaction = mFragmentManager.beginTransaction(); } while (mSavedState.size() <= position) { mSavedState.add(null); } mSavedState.set(position, fragment.isAdded() ? mFragmentManager.saveFragmentInstanceState(fragment) : null); mFragments.set(position, null); // 我们可以看到每次切换Fragment时,Fragment会被移除销毁掉。 mCurTransaction.remove(fragment); }
4、Fragment生命周期
fragment 单独的生命周期
- onAttach(): fragment与activity关联之后的调用。
- onCreate(): 初次创建fragment时调用。
- onCreateView(): fragment首次绘制界面时调用,将显示该方法返回的View组件。
- onActivityCreated(): fragment所在的activity被启动完成时调用。
- onStart(): fragment可见的时候调用。
- onResume(): fragment可交互时调用。
- onPause(): fragment失去焦点不可交互时调用。
- onStop(): fragment不可见时调用。
- onDestroyView(): fragment销毁UI界面时调用。
- onDestroy(): fragment销毁时调用。
- onDetach(): fragment从activity中解除关联、删除、替换完成时调用。
fragment与Activity的生命周期交互
5、Fragment的通信
Fragment调用Activity中的方法:
1.通过getActivity()获取Activity对象进行操作。-
Activity调用Fragment中的方法:
1、接口回调。在fragment中创建回调接口,Activity实现接口监听。
2、获取fragment实例对象,进行操作。 -
Fragment调用Fragment中的方法:
1、 FragmentManager.findFragmentById
2、FragmentManager() .findFragmentByTag// 获取fragment实例,进行操作 Fragment fragment = getActivity().getSupportFragmentManager() .findFragmentByTag("xxxxx");
6、Fragment的replace、add、remove方法
- replace:替代Fragment的栈顶页面
- add:添加Fragment到栈顶页面
- remove:移除Fragment栈顶页面
上一篇: 学习笔记-啊哈C的使用21.1.1
下一篇: Java 语法清单-快速回顾