Fragment
2015-10-12 20:47
260 查看
说点废话:
关于这一天的到来,真的等了太久了。
对于Android的学习,我总是断断续续,就跟玩LOL的时候很少一波推完一样。其中时间停顿最长的大概就是Fragment了。数次想开始学习,却数次停下来。
是因为它和Activity的相似性和关联性?还是因为又要记住一个生命周期?又或许是部分功能通过子Activity也可以直接实现?
总之我就是不愿意学它,导致学习进度一再搁浅。
不过,这一天终归是来了,我终于完成了对Fragment初步的学习,可以进行一些浅显的总结了。
不过我并不打算进行演示了。因为,我机器炸了..
是的没错….
炸了!
虚拟机打不开!! 打不开还怎么截图!!!
Android平板也炸了!!! 炸了!!!!
最近就没一件顺心的事…….
好,那么废话说完了,开始总结。
Fragment代表了Activity的子模块,我们可以把Fragment理解成Activity片段。它拥有自己的生命周期,也可以接受自己的输入事件。我们可以将Activity作为Fragment的一个容器和控制器,动态的添加、替换和移除某个Fragment。
一个Activity可以同时组合多个Fragment,一个Fragment也可以被多个Activity复用。
通常为了控制Fragment显示的组件,会重写onCreateView()。当Fragment绘制界面组件时将会回调该方法,该方法会返回一个View作为该Fragment显示的View组件。
演示:
1.首先要在/res/layout/目录下创建两个Fragment的布局文件,这里命名为fragment_left和fragment_right;
fragment_left:
fragment_right:
2.新建两个Java类继承自Fragment,重写onCreateView()代码;
LeftFragment:
RightFragment:
3.修改activity_main代码,通过android:name属性来显式指明要添加的碎片类名(要将类的包名也加上):
这就是Fragment的静态创建方法了。
使用findFragmentById()或findFragmentByTag()来获取指定的Fragment。
在Activity运行时,可通过FragmentManager的beginTransaction()方法开启并返回FragmentTransaction对象。使用该对象的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
调用popBackStack()方法将Fragment从后台栈中弹出。
调用addOnBackChangeListener()注册一个监听器,用于监听后台栈的变化。
注:当调用FragmentTransaction的add()等方法对Fragment进行修改后,要记得调用它的该Transaction的commit()方法对改动进行提交。
FragmentTransaction也被称作Fragment事务,代表了Activity对Fragment执行的多个改变操作。
例:
动态添加fragment
创建待添加的碎片实例。
获取到FragmentManager,在Activity中调用getFragmentManager()方法得到。
调用beginTransaction()方法开启一个事务。
向容器内加入碎片,一般使用replace(),需要在其中传入容器的id和待添加的碎片实例。
通过commit()方法提交事务。
当Activity暂停时,该Activity内所有的Fragment都会暂停;当Activity被销毁时,该Activity内所有的Fragment都会被销毁。只有当Activity处于活动状态时,里面的Fragment才可以被操作。
与Activity类似,Fragment也存在以下四种状态:
运行状态:当前Fragment位于前台,用户可见,可以获得焦点。
暂停状态:其他Activity位于前台,该Fragment依然可见,只是不能获得焦点。
停止状态:该Fragment不可见,失去焦点。
销毁状态:该Fragment被完全删除,或该Fragment所在的Activity被结束。
下面上图!
由图可知,在Fragment的生命周期中,这些方法会被系统回调。
onAttach():当该Fragment被添加到Activity时被回调。这个方法只会被调用一次。
onCreate(Bundle savedStatus):创建Fragment时被回调。该方法也只会被调用一次。
onCreateView():每次创建和绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View组件。
onActivityCreated():当Fragment所在的Activity被启动完成后回调该方法。
onStart():启动Fragment时被回调。
onResume():恢复Fragment时被回调,与Activity的生命周期类似,在onStart()方法后一定会回调onResume()方法。
onPause():暂停Fragment时被回调。
onStop():停止Fragment时被回调。
onDestroyView():销毁该Fragment所包含的View组件时调用。
onDestroy():销毁Fragment时被调用。该方法只会被调用一次。
onDetach():将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDetach()方法。该方法也只会被调用一次。
对大部分Fragment来说,通常都会重写onCreate()、onCreateView()、onPause()方法。我们在实际开发中可以根据需要自己重写其他的回调方法。
这就是一些我对Fragment的浅显总结,由于机器原因和自身水平限制,在演示部分我并没有做多少。所以我决定贴上三篇我看了多遍的郭霖前辈的博文,供自己也供某个有缘看我博客的人查看。
Android Fragment完全解析,关于碎片你所需知道的一切|郭霖
Android手机平板两不误,使用Fragment实现兼容手机和平板的程序|郭霖
Android Fragment应用实战,使用碎片向ActivityGroup说再见|郭霖
注:知识点参考自Android官方文档、《疯狂Android讲义》| 李刚以及《第一行代码》|郭霖
关于这一天的到来,真的等了太久了。
对于Android的学习,我总是断断续续,就跟玩LOL的时候很少一波推完一样。其中时间停顿最长的大概就是Fragment了。数次想开始学习,却数次停下来。
是因为它和Activity的相似性和关联性?还是因为又要记住一个生命周期?又或许是部分功能通过子Activity也可以直接实现?
总之我就是不愿意学它,导致学习进度一再搁浅。
不过,这一天终归是来了,我终于完成了对Fragment初步的学习,可以进行一些浅显的总结了。
不过我并不打算进行演示了。因为,我机器炸了..
是的没错….
炸了!
虚拟机打不开!! 打不开还怎么截图!!!
Android平板也炸了!!! 炸了!!!!
最近就没一件顺心的事…….
好,那么废话说完了,开始总结。
概述
Android系统运行在各种各样的设备中,小到各种尺寸的手机大到平板甚至电视。在开发时,为了做到一个App同时适应手机和平板,在Android3.0时引入了Fragment。Fragment代表了Activity的子模块,我们可以把Fragment理解成Activity片段。它拥有自己的生命周期,也可以接受自己的输入事件。我们可以将Activity作为Fragment的一个容器和控制器,动态的添加、替换和移除某个Fragment。
一个Activity可以同时组合多个Fragment,一个Fragment也可以被多个Activity复用。
Fragment的简单使用
Fragment和Activity在某些方面是很相似的,当我们实现Fragment的时候必须继承Fragment基类或它的任意子类(DialogFragment、ListFragment、PreferenceFragment、WebViewFragment)。接下来它们也和Activity一样需要实现一些回调方法,例如onCreate()、onCreateView()、onStart()、onPause()等。通常为了控制Fragment显示的组件,会重写onCreateView()。当Fragment绘制界面组件时将会回调该方法,该方法会返回一个View作为该Fragment显示的View组件。
演示:
1.首先要在/res/layout/目录下创建两个Fragment的布局文件,这里命名为fragment_left和fragment_right;
fragment_left:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ff00" andorid:orientation="vertical"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="替换" /> </LinearLayout>
fragment_right:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffff00" andorid:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="这是右Fragment" /> </LinearLayout>
2.新建两个Java类继承自Fragment,重写onCreateView()代码;
LeftFragment:
public class LeftFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ View view=inflater.inflate(R.layout.fragmet_left,container,false); return view; }
RightFragment:
public class RightFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ View view=inflater.inflate(R.layout.fragmet_right,container,false); return view; }
3.修改activity_main代码,通过android:name属性来显式指明要添加的碎片类名(要将类的包名也加上):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fragment_left" android:name="come.demo.fragment.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <fragment android:id="@+id/fragment_right" android:name="come.demo.fragment.RightFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout>
这就是Fragment的静态创建方法了。
Fragment管理与Fragment事务
Activity主要通过FragmentManager来管理Fragment,例:使用findFragmentById()或findFragmentByTag()来获取指定的Fragment。
在Activity运行时,可通过FragmentManager的beginTransaction()方法开启并返回FragmentTransaction对象。使用该对象的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
调用popBackStack()方法将Fragment从后台栈中弹出。
调用addOnBackChangeListener()注册一个监听器,用于监听后台栈的变化。
注:当调用FragmentTransaction的add()等方法对Fragment进行修改后,要记得调用它的该Transaction的commit()方法对改动进行提交。
FragmentTransaction也被称作Fragment事务,代表了Activity对Fragment执行的多个改变操作。
例:
动态添加fragment
创建待添加的碎片实例。
获取到FragmentManager,在Activity中调用getFragmentManager()方法得到。
调用beginTransaction()方法开启一个事务。
向容器内加入碎片,一般使用replace(),需要在其中传入容器的id和待添加的碎片实例。
通过commit()方法提交事务。
Fragment生命周期
Fragment必须被“嵌入”Activity中使用,所以虽然它有自己的生命周期,但Fragment的生命周期会受到它所在的Activity的生命周期控制。当Activity暂停时,该Activity内所有的Fragment都会暂停;当Activity被销毁时,该Activity内所有的Fragment都会被销毁。只有当Activity处于活动状态时,里面的Fragment才可以被操作。
与Activity类似,Fragment也存在以下四种状态:
运行状态:当前Fragment位于前台,用户可见,可以获得焦点。
暂停状态:其他Activity位于前台,该Fragment依然可见,只是不能获得焦点。
停止状态:该Fragment不可见,失去焦点。
销毁状态:该Fragment被完全删除,或该Fragment所在的Activity被结束。
下面上图!
由图可知,在Fragment的生命周期中,这些方法会被系统回调。
onAttach():当该Fragment被添加到Activity时被回调。这个方法只会被调用一次。
onCreate(Bundle savedStatus):创建Fragment时被回调。该方法也只会被调用一次。
onCreateView():每次创建和绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View组件。
onActivityCreated():当Fragment所在的Activity被启动完成后回调该方法。
onStart():启动Fragment时被回调。
onResume():恢复Fragment时被回调,与Activity的生命周期类似,在onStart()方法后一定会回调onResume()方法。
onPause():暂停Fragment时被回调。
onStop():停止Fragment时被回调。
onDestroyView():销毁该Fragment所包含的View组件时调用。
onDestroy():销毁Fragment时被调用。该方法只会被调用一次。
onDetach():将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDetach()方法。该方法也只会被调用一次。
对大部分Fragment来说,通常都会重写onCreate()、onCreateView()、onPause()方法。我们在实际开发中可以根据需要自己重写其他的回调方法。
这就是一些我对Fragment的浅显总结,由于机器原因和自身水平限制,在演示部分我并没有做多少。所以我决定贴上三篇我看了多遍的郭霖前辈的博文,供自己也供某个有缘看我博客的人查看。
Android Fragment完全解析,关于碎片你所需知道的一切|郭霖
Android手机平板两不误,使用Fragment实现兼容手机和平板的程序|郭霖
Android Fragment应用实战,使用碎片向ActivityGroup说再见|郭霖
注:知识点参考自Android官方文档、《疯狂Android讲义》| 李刚以及《第一行代码》|郭霖
相关文章推荐
- Hibernate 的<generator class="native"></generator>的不同属性含义
- iOS开发 ----- FMDB使用
- 从表中随机返回n条记录
- [LeetCode]题解(python):021-Merge Two Sorted Lists
- HDU2612 Find a way
- 内存调优
- 利用模拟退火算法求解TSP问题(C++实现)
- 哈夫曼树——C++实现
- Kubernetes部署服务 - ReplicationController多副本负载均衡实战
- 软件测试人员与QA的区别
- 【noip停课集训,10.12】【#2training】
- 八皇后问题(Python实现)
- 用JS的正则表达式如何判断输入框内为中文或者是英文
- 关于BIOS的入口地址0xFFFF0
- samba config
- 二叉树-遍历
- 折半查找法
- JAVA设计模式之单例模式
- Sql Server异常捕获 try catch
- 二叉树-层序遍历