Android 使用 Fragment 开发

为什么要使用fragment?

1.activity本身不具有灵活性,使用fragment可以组装activity,比如平板上的列表明细界面。

2.便于将应用的UI分解成块,用于其他类型的应用。

activity托管fragment:activity在其视图层级里提供一处位置用来放置fragment的视图。fragment本身不具有在屏幕上显示视图的能力,只有将它的视图放置在activity的视图层级结构中,fragment视图才能显示在屏幕上。

托管UI fragment,activity必须做到:

1.在布局中为fragment的视图安排位置

2.管理fragment实例的生命周期


activity托管UI fragment的两种方式:

1.在activity布局中添加fragment

不够灵活,绑定了fragment视图与activity视图,在activity的生命周期中无法切换fragment视图。

2.在activity代码中添加fragment

具有灵活性。

Fragment.onCreate(Bundle)是公共方法,而Activity.onCreate(Bundle)是保护方法,Fragment的生命周期方法必须是公共方法,因为托管fragment的activity要调用它们。

Fragment.onCreate(...)配置了fragment实例,但没有生成视图。

创建和配置fragment视图是另一个fragment生命周期方法完成的:

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup  container, @Nullable Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_anyname, container, false);

return view;

}

该方法实例化fragment视图的布局,然后将实例化的View返回给托管的activity。LayoutInflater及ViewGroup是实例化布局的必要参数。Bundle用来存储恢复数据,供该方法从保存状态下重建视图。

调用LayoutInflater.inflate(...)方法生成视图,第二个参数是视图的父视图,第三个参数告知布局生成器是否将生成的视图添加给父视图,这里传入false参数,因为是以activity代码的方式添加视图。

Fragment生命周期图

添加UI fragment到FragmentManager

FragmentManager类具体管理:

1.fragment队列

2.fragment事务回退栈

fragment事务被用来添加、移除、附加、分离或替换fragment队列中的fragment,这是使用fragment在运行时组装和重新组装用户界面的关键。

在Activity的onCreate(...)方法中:

//获取FragmentManager

FragmentManager fm = getSupportFragmentManager();

//activity被销毁时,它的FragmentManager会将fragment队列保存下来。

Fragment fragment = fm.findFragmentById(R.id.fragment_container);

if(fragment ==null) {

fragment = createFragment();

//创建并提交一个fragment事务

fm.beginTransaction()

/*两个参数,容器视图资源ID和新建的fragment,容器视图资源ID作用:

1.告诉FragmentManager,fragment视图应该出现在activity视图的什么位置

2.用作FragmentManager队列中fragment的唯一标识符

如需从FragmentManager中获取Fragment,使用容器视图资源ID就行了,即每个fragment创建不同ID的容器*/

.add(R.id.fragment_container,fragment)

.commit();

}

使用fragment前先添加support-v4支持包。

一个良好的使用原则:应用单屏至多使用2~3个fragment。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容