Android之fragment介绍及fragment详解

来源:互联网 发布:淘宝一千零一夜第二季 编辑:程序博客网 时间:2024/06/05 09:45

注:本人介绍的相关知识是本人结合学习中的理解用通俗的方式讲解,目的是帮助一些想要学习android知识的同学有更好的理解,如有问题请直接留言,转载请注明谢谢。

1.fragment是什么?

android在3.0的时候开始引入fragment,其目的主要是方便于平板设备。
看如下图我来说一下:

第一个是平板应用,可以理解为左边是一些标题,当用户点击任意标题的时候右边的详细页面相应改变。
当然也可以用在手机上右图就是,但是为了方便理解我把我之前应用的向大家说一下,

我是使用一个activity管理多个fragment,滑动切换多个页面,如图为我开发的某微博客户端(自己拿来练手的)。

看下面可以看出这是滑到两个页面,这样方便管理。

2.fragment的生命周期

生命周期看如下图:

从上至下执行到onResume() 方法fragment就加载完成了
当然如果像我一样一个activity管理很多fragment的话,系统会提前加载出来几个貌似是三个在fragment栈中(后面说)。所以当返回当前fragment的时候会重新调用onCreate()和onCreateView()方法。这里要注意初始化的东西,详细的了解生命周期可以灵活的使用fragment。
其实跟activity差不多了,它的几个子类如下:
DialogFragment、ListFragment、PreferenceFragment、WebViewFragment。我使用了ListFragment来加载ListView。
其他的用法都一样了,只是相比直接使用fragment能更有针对性一些,更好一些。

3.如何创建fragment

创建前提需要导入包
import android.support.v4.app.Fragment;
这是最低支持android1.6版本的支持包
import android.app.Fragment;
这个是最低支持android3.0版本的包,看具体需要选择导入哪个包。
fragment的创建有两种方法:
1.静态创建
就是在xml文件中事先定义好fragment
<?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:id="@+id/fragment"         android:layout_width="match_parent"
<span style="white-space:pre"></span>android:layout_height="match_parent" />   </LinearLayout> 
这样创建缺少灵活性,你不能控制activity在运行时进行fragment的删除等操作,所以有了第二种灵活的方法。

2.动态创建
public class MyFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup parent,Bundle savedInstanceState) {View v = inflater.inflate(R.layout.fragment, parent, false);
<span style="white-space:pre"></span>return v;<span style="white-space:pre"></span>}}
可以选择继承fragment或者其子类
inflate方法的三个参数

  第一个是resource ID,指明了当前的Fragment对应的资源文件;

  第二个参数是父容器控件;

  第三个布尔值参数表明是否连接该布局和其父容器控件,在这里的情况设置为false,因为系统已经插入了这个布局到父控件,设置为true将会产生多余的一个View Group。

这里要注意View对象可以通过加载自己的布局来创建,也可以通过super调用父类的布局创建。

4.把fragment加载到activity中

首先需要这两行代码解释如下:
FragmentManager = fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
其中FragmentManager是管理fragment用的,fragment是存在一个栈中的,通过FragmentManager可以获取FragmentTransaction
FragmentTransaction是用来提交fragment事务的,增删之类。这里你可以理解为管理一些fragment的必须步骤。
注意:当你使用的是support包中的fragment,获取FragmentManager对象的时候需要调用getSupportFragmentManager();相信你看一下错误原因就能看懂该怎么做。

MyFragment fragment = new MyFragment();fragmentTransaction.add(R.id.fragment, fragment);fragmentTransaction.commit();
加载了一个fragment通过add方法,最后commit提交,当然你也可以通过replace方法替换成另一个fragment,其他方法这里就不说了。

这就是我总结的一些关于fragment的理解,大家可以找个小练习试试了,希望对大家有所帮助,有不懂的地方可以直接说,由于本人水平有限,有错误的地方希望大家指出并理解,谢谢。


0 0
原创粉丝点击