Android学习笔记9——用户界面之Fragments(1)

一个Fragment代表着Activity的一种行为或者是用户界面的一部分。你能把多个Fragments结合成一个单独的Activity建立一个多版块UI并且在多个Activity中重复利用同一个Fragment。你能把一个fragment当作一个Activity的一个模块,这个模块有自己的生命周期,接受他自己的输入事件,在这个Activity正在运行的时候,你能动态的添加和移除。

一个Fragment必须嵌入到一个Activity中,并且这个fragment的生命周期被这个主的Activtiy的生命周期影响着。例如,当这个Activtiy暂停的时候,在这个activity之上的所有fragment都暂停,当这个activtiy被销毁,之上的所有fragment也都将随之销毁。然而,当这个Activity运行的时候,你能单独的对每个fragment进行操作,例如添加和移除。当你添加或者移除一个fragment时,你也能把这个事务添加到被这个Activtiy管理的回退栈中(每一个回退栈中的实体是一个发生过的fragment事务的记录)。这个回退栈允许用户在按下回退按钮时撤销一个fragment事务。

当你添加一个fragment作为你的activity布局的一部分时,它存活在这个activiy的视图成次的一个ViewGroup中并且这个fragment有着它自己的布局。你能插入一个fragment到你的activity布局中定义的<fragment>元素中,或者在你的程序中动态的添加到一个现存的ViewGroup布局中。然而,fragment并不一定要成为这个Activity布局的一部分,你也可能用一个没有自己UI的fragment成为一个activity不可见的一部分。

如何创建一个Fragment

创建一个fragment,你必须创建一个继承了Fragment的子类。这个Frament类有自己的看起来像Activity的代码,例如它所包含的生命周期回调方onCreate()onStart()onPause(), and onStop()。而你通常情况下至少要是实现onCreate()、onCreateView()、onPause()方法。

onCreate方法:当创建一个fragment时系统调用这个方法。在这些实现的方法中,你应该初始化这个你想要保留的fragment所必需的组件当这个fragment暂停或者停止的时候,然后恢复

onCreatView方法:当fragment第一次画他自己的界面时调用这个方法。为了用fragemnt实现一个UI,你必须在这个方法中返回一个View.但是如果这个fragment没有一个UI布局时返回null。

onPause()方法:当用户将要离开一个fragment时调用这个方法。在这个方法中我们通常提交一些应该持久化保存的改变。

在大部分的应用中我们至少为每一个fragment实现其中的至少三个方法,但是你也可以用其他几种回调方法去操作fragment生命周期的不同阶段。

我们也可以继承其他的fragment的子类:DialogFragment、LIstFragment、PreferenceFragment.

DialogFrament:展现了一个流畅的对话框。相比用dialog helper方法创建一个对话框,在Activity中用这个类创造一个对话框是一个好的替代方法,因为你能把一个fragment dialog包含到被这个Activity管理的回退栈中,允许用户再次返回已经取消的fragment。

LIstFragment:展示一个被adapter(例如SimpleAdapter)管理的项目列表,和ListActivity很相似。ListFragment提供了多种方法来操作一个列表视图,例如onListItemClick事件来触发点击事件。

PreferenceFragment:展示了Preference对象的一个列表层次,很相似PreferenceActivity。这在你的应用中创建一个Setting很有用。

添加一个用户界面

一个Fragment通常作为一个Activity的用户界面的一部分。

为了赋予Fragment一个布局,你必须实现onCreateView的回调方法,这个方法是Android系统在布局显示的时候调用的。而为了在onCreateView的方法中返回一个布局,你可以用一个定义在XML文件中的布局资源来填充它。为了实现这个功能,onCreateVIew方法提供了一个LayoutInflater对象。

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}
这个传递到onCreateView方法中的container参数是一个你的fragment 布局将要被插入的Activity中的某个ViewGroup。这个 savedInstanceState是一个存储着前一个fragment实例相关数据的Bundle对象,如果这个fragment可以恢复的话。

而inflate方法的第一个参数是你想要填充的布局资源的ID,第二个参数是被填充布局的父控件。这个参数是非常重要的,因为系统可以把这个布局参数应用到被填充布局的根视图下。第三个参数用来设置是否把这个被填充的布局绑定到第二个参数上。(但是我们都会返回false,因为系统默认的已经把被填充的布局插入到container中了,如果是true的话,将要创建一个重复的view group)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值