Android fragment笔记

1 fragment

Fragment 表示 Activity 中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。

不过,片段并非必须成为 Activity 布局的一部分(比如retainInstancefragment);您还可以将没有自己 UI 的片段用作 Activity 的不可见工作线程。

2 创建fragment

要想创建片段,您必须创建 Fragment 的子类(或已有其子类)。Fragment的子类有:

DialogFragment:显示浮动对话框;

ListFragment:显示由适配器(如SimpleCursorAdapter)管理的一系列项目,类似于ListActivity;

PreferenceFragment:以列表形式显示Preference 对象的层次结构,类似于 PreferenceActivity,可用于创建“设置”Activity。

3 fragment生命周期回调方法

                             

Activity生命周期与片段生命周期之间的最显著差异在于它们在其各自返回栈中的存储方式。默认情况下,Activity 停止时会被放入由系统管理的 Activity 返回栈。不过,仅当您在移除片段的事务执行期间通过调用addToBackStack() 显式请求保存实例时,系统才会将片段放入由宿主Activity管理的返回栈。

同样与Activity一样,假使Activity的进程被终止,而您需要在重建Activity 时恢复片段状态,您也可以使用Bundle保留片段的状态。您可以在片段的 onSaveInstanceState()回调期间保存状态,并可在onCreate()、onCreateView() 或onActivityCreated()期间恢复状态。

4 为fragment添加用户界面

要想为片段提供布局,则必须实现onCreateView()回调方法,该方法返回的View 是片段布局的根视图。

View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState)

该方法通过通过LayoutInflater对象从XML中定义的布局资源来扩展布局。

也可不使用inflater,将其他view作为根视图返回。

5 为Activity添加片段

将片段作为 Activity 布局的一部分添加时,可用的方法有:

1、在Activity的布局文件中声明片段,将其作为 <fragment> 元素插入您的 Activity 布局中;

当系统创建此Activity布局时,会实例化在布局中指定的每个片段,并为每个片段调用onCreateView()方法,用片段返回的View来替代<fragment>元素。

2、通过编程方式将片段添加到某个现有ViewGroup

您可以在 Activity 运行期间随时将片段添加到 Activity 布局中。

FragmentManager fragmentManager =getFragmentManager();

FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();

ExampleFragment fragment = newExampleFragment();

fragmentTransaction.add(R.id.fragment_container,fragment);

fragmentTransaction.commit();

3、添加没有UI的片段:add(Fragment fragment, String tag),第二个参数是片段的唯一字符串标记(没有UI的片段,字符串标记将是标识它的唯一方式,无ID标识);稍后从Activity中获取片段,则需要使用 findFragmentByTag()

6 管理片段

通过FragmentManager来管理Activity中的片段,在Activity中调用getFragmentManager()来活的FragmentManager对象,可执行的操作有:

获取片段:findFragmentById()或 findFragmentByTag();

将片段从返回栈中弹出:popBackStack();

注册一个侦听返回栈变化的侦听器:addOnBackStackChangedListener();

执行片段事务:beginTransaction();其中,事务是指想要同时执行的一组更改,包括add()添加片段、remove()移除片段和 replace()替换片段,最后,要想将事务应用到Activity,必须调用commit()。

以下示例说明了如何将一个片段替换成另一个片段,以及如何在返回栈中保留先前状态:

// Create new fragment and transaction
Fragment newFragment = newExampleFragment();
FragmentTransaction transaction =getFragmentManager().beginTransaction();

// Replace whatever is in thefragment_container view with this fragment,

// and add the transaction to the backstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

7 Fragment与Activity通信

片段可以通过 getActivity() 访问Activity 实例;

Activity可以通过FragmentManager使用findFragmentById()或 findFragmentByTag()得到Fragment的引用。

8 创建对 Activity 的事件回调

在某些情况下,您可能需要通过片段与 Activity 共享事件。执行此操作的一个好方法是,在片段内定义一个回调接口,并要求宿主 Activity 实现它。当 Activity 通过该接口收到回调时,可以根据需要与布局中的其他片段共享这些信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值