Android 复习 3 有关于fragment

fragment

最初认识fragment 是说为了解决平板屏幕大,一个屏幕上可以展示不同的内容 看起来像是多个板块;多个板块互相不干涉,就像是网页的div 一样 ;

fragment 碎片 可以认为是一种控件,和button什么的一样;
所以他是可以添加到acivtity上

比如 定义left_fragment.xml 和 right_fragment.xml后,我们可以直接在mainacivity中

1
2
3
4
<fragment
android:name="" 标注这是从哪个xml拿来的
一大堆的其他属性
/>

这样就把某个fragment 放在了activity中了

那么什么是fragment 什么是activity呢?

事实上我们在xml书写的都只是布局文件 没有任何区别 将其区分为fragment 和actitivity是因为如下面的函数:

1
2
3
4
public class left_fragment extend Fragment{
@Override
//函数不写啦
}

这部分函数应该称之为控制器 (在mvc模型中),拿来一个布局文件将其定义为fragment,activity也是类似的原理,生命周期与相关函数不就是写在函数中的嘛

这样就不难理解,因为一个大布局可以套多个布局,所以activity理所应当可以加进来多个fragment-碎片;

UI fragment

原来我们一般使用多个activity 当做程序的不同页面,现在我们有了新帮手,用fragment构建页面,activity负责管理;这样好处是有的,缺点也理所当然;
Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。
(此处copy)
Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。

Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。

Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。

Fragment 解决Activity间的切换不流畅,轻量切换。

Fragment 替代TabActivity做导航,性能更好。

Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。

Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。
可以从startActivityForResult中接收到返回结果,但是View不能。

关于实现

首先 我们要有 一个布局文件 ,有一个activity类,现在我们其实可以加载布局,但这样布局就变成了一个activity。
我们要的是fragment,所以这个布局的显示,将布局变成一个view的函数一定在他自己所属的fragment函数中;
xml文件:fragment_crime.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CrimeFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup parent,Bundle savedInstanceState)
{
View v=inflater.inflate(R.layout.fragment_crime,parent,false);
/*
{这里可以写一些布局有关的东西,和逻辑,就像activity一样}
*/
return v;
}
}

现在我们获得了一个view对吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MainActivity extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android.support.v4.app.FragmentManager fm=getSupportFragmentManager();
Fragment fragment =fm.findFragmentById(R.id.fragmentContainer);
if(fragment==null)
{
fragment=new CrimeFragment();
fm.beginTransaction().add(R.id.fragmentContainer,fragment).commit();
}
}
}

程序有些复杂,不用管太多,我们知道通过FragmentManager 把碎片放进来了;代码多了很多,逻辑也很复杂,但碎片实实在在变得独立化了,他与activity的关系更弱。至于FragmentManager具体实现 谷歌吧;

fragment的生命周期

这个是简单明了的生命周期描述
这里写图片描述
这个是与activity之间的比较 看起来也没什么大的区别
![这里写图片描述]
(http://img.my.csdn.net/uploads/201211/29/1354170682_3824.png)

但是下面这张,是不是觉得突然之间差距就很大。我还在学习,不太清楚,但是我很明白一点,功能越强大,就越复杂,所以关于fragment的话题只能以后再说了;
这里写图片描述