浅谈Android中的 Fragment、生命周期回调方法 以及使用
来源:互联网 发布:知径公司法律师团 编辑:程序博客网 时间:2024/06/06 09:42
浅谈Android中的 Fragment 以及使用
Fragment 是个什么东西?
可以把Fragment理解成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。还可以覆盖前面的一个页面,加载想要的模块
Fragment介绍:
Android是在Android 3.0 (API level 11)开始引入Fragment的,要么用全部用app,要么全部用v4(3.0以下需要导入的包),不然可是会报错的!
那么如果开发的app需要在3.0以下的版本运行呢?比如还有一点点市场份额的2.3!
于是乎,v4包就这样应运而生了,而最低可以兼容到1.6版本!至于使用哪个包看你的需求了,不过现在几乎都是
4.0以上的,所以这个时候,你可以直接使用app包下的Fragment,然后调用相关的方法通常都是不会有什么问题的
使用v4包要注意的事项:
①如果你使用了v4包下的Fragment,那么所在的那个Activity就要继承FragmentActivity哦!
案例:今天在xml文件中静态地载入fragment,然后重写了Fragment,但是在加载Activity的时候就报错了,
大概的提示就是Fragment错误还是找不到什么的,name属性改了几次还是错!最后才发现是用了
v4的包的缘故,只需让自己的Activity改成FragmentActivity即可!
Fragment 生命周期? Activity生命周期:
作用:fragment已经关联到activity,这个时候 activity已经传进来了, 获得activity的传递的值 就可以进行 与activity的通信里, 当然也可以使用getActivity(),前提是这个fragment已经和宿主的activity关联,并且没有脱离,有且只有调用一次。
这些个变量主要是:当你 暂停 停止的时候 你想保持的数据
他只调用一次。
3.onCreateView()
第一次使用的时候 fragment会在这上面画一个layout出来, 为了可以画控件 要返回一个 布局的view,也可以返回null j 就什么都没有显示。
当系统用到fragment的时候 fragment就要返回他的view,越快越好 ,所以尽量在这里不要做耗时操作,比如从数据库加载大量数据
4onActivityCreated()
当Activity中的onCreate方法执行完后调用。
注意了:
从这句官方的话可以看出:当执行onActivityCreated()的时候 activity的onCreate才刚完成。
所以在onActivityCreated()调用之前 activity的onCreate可能还没有完成,
所以不能再onCreateView()中进行 与activity有交互的UI操作,UI交互操作可以在onActivityCreated()里面进行。
所以呢,这个方法主要是初始化那些你需要你的父Activity或者Fragment的UI已经被完
整初始化才能初始化的元素。
5.onStart()
和activity一致,启动Fragement 启动时回调,,此时Fragement可见。
6.onResume()
和activity一致 在activity中运行是可见的。激活, Fragement 进入前台, 可获取焦点时激活。
7.onPause()
和activity一致 其他的activity获得焦点,这个仍然可见第一次调用的时候,指的是 用户 离开这个fragment(并不是被销毁)
通常用于 用户的提交(可能用户离开后不会回来了)
8.onStop()
和activity一致, fragment不可见的, 可能情况:activity被stopped了或者 fragment被移除但被,加入到回退栈中,一个stopped的fragment仍然是活着的如果长时间不用也会被移除。
9. onDestroyView()
Fragment中的布局被移除时调用。表示fragemnt销毁相关联的UI布局, 清除所有跟视图相关的资源。
然后这个知识移除视图 并没有销毁而且还没有脱离activity
10.onDestroy()
销毁fragment对象, 跟activity类似了。
11.onDetach()
Fragment和Activity解除关联的时候调用。 脱离activity。
接下来 来模拟一个fragment 的启动 按下home键 销毁等 系统是怎么样调用生命周期,这里用Logcat日志来查看
(XX_Fragment 为Fragment的生命周期 否则为Activity周期)
当现实fragment的时候都先执行activity方法,当销毁的时候都是现执行 fragment的方法,这样更好理解fragment是嵌套在activity中
总结生命周期的回调方法:
1.当一个fragment被创建的时候,它会经历以下状态.。
onAttach()
onCreate()
onCreateView()
onActivityCreated()
2.当这个fragment对用户可见的时候,它会经历以下状态。
onStart()
onResume()
3.当这个fragment进入“后台模式”的时候,它会经历以下状态。
onPause()
onStop()
4.当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
onPause()
onStop()
onDestroyView()
onDetach()
5.就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
onCreate()
onCreateView()
onActivityCreated()
6.fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
onAttached() —— 当fragment和activity关联之后,调用这个方法。
onCreateView() —— 创建fragment中的视图的时候,调用这个方法。
onActivityCreated() —— 当activity的onCreate()方法被返回之后,调用这个方法。
onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
onDetach() —— 当fragment和activity分离的时候,调用这个方法。
解析完了生命周期 以及生命周期的回调方法,接下来看下如何应用。
假设这次有个 侧滑菜单 就是类似QQ 的侧滑菜单 侧滑菜单上的每个item 点击之后都有自己的fragment 但是在使用过程中,如果使用不当,很容易造成 不断的重新加载view 损耗内存空间。
这几天在网上查找了一些frgment 的优化资料,也发现了很多都是问题,自己撸一套自己使用。
介绍具体的几个常用的方法:
FragmentManager fragmentManager = getFragmentManager()FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
管理Fragment的一些添加 隐藏 替换等操作 需要的。
(注:如果import android.support.v4.app.FragmentManager;那么使用的是:FragmentManager fragmentManager = getSupportFragmentManager())
add()方法加上Fragment的对象
fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTransaction.commit();一次类推。 replace() show() hide() 等方法都是类似使用。
这里最后看一贴代码,最后的使用
public void switchConent(Fragment from, Fragment to, String title) { FragmentTransaction transactio = getSupportFragmentManager().beginTransaction();// 如果没有加入过if (!to.isAdded()){ if (from != null) {// 如果不为空 则隐藏transactio.hide(from);transactio.addToBackStack(null); } // 添加 transactio.add(R.id.content_frame, to); transactio.commit();} else{ if (from != null) {transactio.hide(from); } /**这里可以写一些用户操作数据的 调用方法*/ // 隐藏当前的fragment,显示下一 transactio.show(to).commit(); }}
from 从哪个fragment 换到 目标fragment to;
isadded() 判断事都 添加过 如果没有 那可以添加。
逻辑也很简单,隐藏 显示 提交 交互使用。
比较关键的一点 就是如何更新fragment上的UI数据。 这里可以在对应的fragment 里写一些UI操作的方法 然后在 上面那段代码 show(Object).commit() 中调用。
管理 侧滑菜单上的所有 Fragment:
可以用 单例模式和工厂模式 来管理 全部的fragment 防止多次被创建。引用当前显示的fragment作为等下 换页的时候
传入参数的from。
简单的fragment介绍完了。
- 浅谈Android中的 Fragment、生命周期回调方法 以及使用
- Android中的Fragment使用详解之生命周期
- Android Fragment生命周期及各个方法使用
- 浅谈接口回调以及在Android中的使用
- Fragment的生命周期,以及fragment用hide和show,以及放在Viewpager中的使用
- ViewPager+Fragment使用中的Fragment生命周期
- 浅谈 Fragment 生命周期
- 浅谈 Fragment 生命周期
- Fragment的生命周期以及使用技巧
- Android——Fragment的生命周期及其回掉方法...
- android Fragment生命周期和回退栈学习以及Fragment之间通信
- Android Activity生命周期以及Fragment生命周期的区别与分析
- Android Activity生命周期以及Fragment生命周期的区别与分析
- Android Activity生命周期以及Fragment生命周期的区别与分析
- Android Activity生命周期以及Fragment生命周期的区别与分析
- 关于Android Fragment生命周期以及其他方法的调用执行顺序问题
- Android:Fragment在ViewPager中的生命周期
- Android Fragment 替换覆盖生命周期方法详解
- LintCode(easy)删除元素
- 【HDU】3944 - DP?(Lucas & 逆元 & 大组合数 & 打表)
- tjut 2832
- IIS是如何处理ASP.NET请求的
- PHP防CC攻击代码_网页防止快速恶意刷新
- 浅谈Android中的 Fragment、生命周期回调方法 以及使用
- redis make test报错
- 小心Windows旧版认证暴露你的系统帐户密码 ntlmv2破解
- 想要写出跟知名开源库一样的代码,首先你需要知道……
- libpng16.so.16错误
- window7使用MinGW在命令行编译C/C++源程序
- 为APP名称和内部控件提供多语言支持
- Caffe 编译: undefined reference to imencode()
- 【杭电1003】Max Sum