fragment

Fragment代表了Activity的一种行为或者界面的一部分,可以让单一的Activity变的复杂化。Fragment有自己的生命周期,接收自己的事件。当Activity运行时你可以add或者remove它,它就像Activity的子模块一样。

Fragment总是嵌入在Activity里面,并且它的生命周期跟Activity联系在一起。比如,当Activity暂停,内部的Fragment也暂停;当Activity销毁,内部的Fragment有也销毁。但是,当Activity运行时,你可以独立的操作Fragment,比如add或remove他。当你执行一个Fragment的事务时,也能将他们加载到Activity的回退栈中。Activity的回退栈将会记录Fragment的事务的产生。当按返回键,就能可以释放之前的Fragment。

你可以加载Fragment作为Activity的一个布局,它必须存在ViewGroup里面,它能定义自己的布局,也可以直接嵌入到Activity本身的布局里面,不过Activity本身的布局里面最好不要有别的空间在里面。

这篇文档将告诉你在你的APP中如何使用Fragment,包括怎样维持他们的状态,当他们被加载到Activity中;与Activity或者其他Fragment分享事件;怎样为ActionBar服务等等。

设计思路

Android是在Android 3.0引入Fragment,主要是为了支持更多动态的灵活的UI设计在大屏幕当中,比如平板电脑。Fragment的设计允许你不去管理复杂的视图层。Activity中除了被Fragment分开的布局,你能在Activity运行时改变它的外观,保存他的变化通过Activity的回退栈。

例如一个新闻的应用,一个Fragment可以在左边显示它的新闻列表,另一个Fragment在右边显示文章。其中两个Fragment都在同一个Activity中,每个Fragment都有自己的生命周期,回调方法,处理时间的方式。因此,在平板中这可以代替两个Activity的方式,就像图一显示的一样。

独立设计了两个Fragment后,要需要用在手机上直接将Fragment放入另一个布局就可以了。

创建Fragment

创建一个Fragment,你必须先了解它的生命周期,生命周期跟Activity差不多,


下面来解读生命周期。

onAttch():用来跟Activity建立联系,通常Fragment与Activity通信,调用接口时,这个方法来获得ACtivity

onCreate():初始化工作

onCreateView():返回一个Fragment的xml布局。因为Fragment进入回退栈以后是从这里开始的,所以按下导航键,可能Fragment会重新刷一遍,跟之前的不一样,我们可以把Fragment放在一个Activity中,这样回退过去就保持原来的状态。还可以用onSaveInstanceState(Bundle outState),这样按返回键的时候就就保持可以通过你传回来的bundle重新这是状态。

onActivityCreated():可以用getActivity()来获得布局View,然后进行操作。


onStart():没用过


onResume():没用过


onPause():


onStop():


onDestroyView():


...

在Activity中添加Fragment

1.在xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>
这样,Activity在实例化时就直接用Fragment中onCreateView的布局代替了这里的布局。

注意:每个Fragment都需要一个独一无二的标示符,这样你就能操作它,比如remove,获得事件等等。

有android:id和android:tag两种方式来标识,如果这两种都没有,那没系统默认它的父容器id来标识;

2.在代码中动态加载Fragment到ViewGroup中。

首先你的Activity要获得一个FragmentManager

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

当fragmentTransaction发生改变一定要commit();


写了一半,英语水平实在不够,特别是看到一篇别人写的这么好的博客,根本没必要再翻译了嘛

http://blog.csdn.net/t12x3456/article/category/1649005



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值