Fragment简单使用
Fragment :在Activity中使用的碎片,有自己的布局、生命周期和输入事件
下面我先来简单说一下使用Fragment的步骤
1、创建类,并继承Fragment
2、重写Fragment的onCreateView()生命周期方法,并返回一个View
3、在布局文件中使用<fragment android:name="自定义Fragment的类路径" />
使用FragmentManager,FragmentManager管理多个Frament之间的交互和传值的
android 3.0以前版本当前Activity需要继承FragmentActivity并引入v4包
Activity.getFragmentManager() 3.0以后
FragmentActivity.getSupportFragmentManager() 3.0以前,引用v4包
FragmentTransaction beginTransaction() 获取Fragment事务处理对象
FragmentTransaction的使用
作用:Fragment的处理事处类,可以在指定的ViewGroup上增加、更新、删除Fragment
add(int containerViewId, Fragment fragment) 将Fragment对象增加到指定的ViewGroup控件上
replace(int containerViewId, Fragment fragment, String tag) 替换指定ViewGroup上的Fragment
commit() 提交本次事务处理
关于Fragment还有一个小问题
一、碎片的产生?
1、Android在3.0系统的时候,开始为电视机提供系统,但是电视机的屏幕尺要比
现在的移动设备大很多,Google的开发人员希望在开发的过程中能够将整个屏幕划分成多个的部分
并且每个部分可以单独开发实现界面以及功能最终这些的部分需要组合在起那么最终设计出来一个称作Fragment的内容。
2、Fragment 是个能够显示界面以及有独立的代码逻辑的组件Fragment可以在布局中直接引
二、使用碎片的好处?
1、简化重复的开发 作 将内容与进程整合最终提供功能的重要性
2、提高内聚减少耦合程度
3、Fragment 用于布局界面的切分与优化,减少布局的重复提高开发的效率。
接下来我们说一下Fragmen的t生命周期,Fragment有11个生命周期方法,分别为
1.onAttach(Activity) 连接宿主Activity
2.onCreate(Bundle) 创建Fragment
3.onCreateView(LayoutInflater, ViewGroup, Bundle)创建Fragment视图 前四个同Activity的Created状态
4.onActivityCreated(Bundle) 当宿主Activity的onCreate()执行完之后调用
5.onStart()
6.onResume() 5-8同Activity相应的生命周期方法
7.onPause()
8.onStop()
9.onDestroyView() 销毁Fragment视图,与onCreateView对应
10.onDestroy() 销毁Fragment,与onCreate对应 同Activity的Destory
11.onDetach() 与宿主Activity断开连接,与onAttach对应
下面说一下生命周期流程
1、当Activity创建时,调用Fragment的onAttach->onCreate->onCreateView->onActivityCreated
2、当Activity启动时,调用Fragment的onStart
3、当Activity获取焦点时,调用Fragment的onResume
4、当跳转到另一个Activity时,调用Fragment的onPause-->onStop
5、当返回Activity时,调用Fragment的onStart->onResume
6、销毁Activity时,调用Fragment的onDestroyView->onDestory->onDetach
Fragment传值:
有三种方式
1.Bundle方式:
通过Fragment.setArguments(Bundle)传值,这种方式只适用还没有显示的Fragment
在Fragment中,通过Fragment.getArguments()获取Bundle
2.接口回调方式:
横竖屏切换,生命周期不一致
回调接口可能尚未实例化,需要在碎片内部进行getActivity转型,完成接口的实例化
3.Activity的方式:
在Activity中获取Fragment中的UI控件,并增加相关事件
在Activity声明公共方法,在Fragment中调用getActivity()并强转,则可以调用公共方法向其他Fragment控件传值
Fragment与回退栈:
作用:因在同一ViewGroup中显示多个Fragment,因此需要回退到上一次的Fragment时,需要回退栈
FragmentTransaction.addToBackStack(String name) 将当前的Fragment增加到回退栈中
Fragment的相关类:
有ListFragment和DialogFragment,接下来就详细讲一下这两个相关类
ListFragment,是带有ListVeiw控件的Fragment,setListAdapter(BaseAdapter) 设置ListView显示内容的适配器,重写onListItemClick()方法处理LIstView的item点击事件。
DialogFragment是带有生命周期的对话框,首先创建类,并继承DialogFragment(或者重写onCreateView方法,并通过setStyle()设置对话框样式),二选一,在Activity中通过自定义类的对象调用show(FragmentManager fm, String tag)
ListActivity:
是带ListView的Activity,让当前的Activity直接继承ListActivity,然后调用setAdapter方式设置适配器对象,再重写onListItemClick()方法处理LIstView的item点击事件
下面为大家拓展一些小知识
V4和V7包:
Android Support v4: 这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认带有了。
Android Support v7: 这个包是为了考虑照顾2.1及以上版本而设计的,但不包含更低,故如果不考虑1.6,我们可以采用再加上这个包,另外注意,v7是要依赖v4这 个包的,即,两个得同时被包含。
Android Support v13 :这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
碎片懒加载:
public void setUserVisibleHint(boolean isVisibleToUser) {
Log.e("Fragment", "setUserVisibleHint");
if(getUserVisibleHint())//验证是否可见
{
isVisible=true;
loadData();
}else {
isVisible=false;
}
}
我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?
答案就在Fragment里的setUserVisibleHint这个方法里
该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。
好啦 关于Fragment的生命周期就讲到这里吧