Fragment开发实战(一)

一、 Fragment的特征:

1. Fragment总是Activity界面的组成部分。Fragment可调用getActivity()方法获取它所在的Activity,Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法来获取Fragment。

2. 在Activity的运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态的添加、删除或替换Fragment。

3. 一个Activity可以同时组合多个Fragment; 反过来,一个Fragment也可以被多个Activity复用。

4. Fragment可以响应自己的输入事件,并拥有自己的生命周期,但他们的生命周期直接被其所属的Activity的生命周期控制。

二、 创建Fragment

与创建Activity类似,开发者实现Fragment必须继承自Fragment基类,Android的Fragment的继承体系包括:

Fragment

    |__  DialogFragment

    |__  ListFragment

    |__  PreferenceFragment

    |__  WebViewFragment

开发Fragment通常需要复写其中的回调方法,一般情况下要实现如下三个方法;

   onCreate()、 onCreateView()、 onPause()

其中,onCreateView用于该Fragment控制显示View组件,该方法返回View作为Fragment显示的View组件。

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        Button bt_first = (Button) view.findViewById(R.id.bt_first);
        bt_first.setText(MainActivity.temp);
        bt_first.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                Intent intent = new Intent(getActivity(), Activity_Second.class);
                startActivity(intent);
            }
        });
        return view;
    }

上述方法中,我们通过LayoutInflater加载了布局文件,并返回了该View; 通过程序我们也可以发现,Fragment可以响应自己的输入事件(此处为Click事件)。

示例:

1)接下来,我们开发一个简单的Fragment相关的实例,实现的效果如图:

2)我们首先定义MainActivity:

public class MainActivity extends FragmentActivity
{
    public static String temp = "Hello World";

    public static String getTemp()
    {
        return temp;
    }

    public static void setTemp(String temp)
    {
        MainActivity.temp = temp;
    }

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        FirstFragment first = new FirstFragment();
        // 如果用add()的话会出现不完全覆盖效果
        ft.replace(R.id.container, first);
        ft.commit();
    }

    // 切换到第二个fragment
    public void onClick_btn(View v)
    {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        SecondFragment second = new SecondFragment();
        ft.replace(R.id.container, second);
        ft.commit();
    }
}

3)定义FirstFragment,它将在MainActivity的onCreate()方法里被加载:

public class FirstFragment extends Fragment
{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // 加载布局文件
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        // 可以得到Fragment布局文件中的widget
        Button bt_first = (Button) view.findViewById(R.id.bt_first);
        // 设置按钮的文字信息
        bt_first.setText(MainActivity.temp);
        // 设置按钮的监听事件
        bt_first.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                // 在Fragment中,可以通过getActivity()方法得到管理它的Activity
                Intent intent = new Intent(getActivity(), Activity_Second.class);
                startActivity(intent);
            }
        });
        return view;
    }
}

4)定义第二个Fragment,该Fragment将在主界面“Click Me”按钮的事件激发后,替换第一个Fragment。

public class SecondFragment extends Fragment
{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // 加载布局文件
        View view = inflater.inflate(R.layout.fragment_second, container, false);
        // 得到按钮
        Button bt_second = (Button) view.findViewById(R.id.bt_second);
        bt_second.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                // 得到FragmentTransaction
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                // 设置Fragment切换的动画
                ft.setCustomAnimations(R.animator.move_in, R.animator.move_out);
                // 定义第一个Fragment
                FirstFragment first = new FirstFragment();
                // 替换Fragment
                ft.replace(R.id.container, first);
                // 提交事务
                ft.commit();
            }
        });
        return view;
    }
}

代码下载(免费): http://download.csdn.net/detail/zuiwuyuan/7957515

时间: 2014-09-22

Fragment开发实战(一)的相关文章

Fragment开发实战(二)

由于在Android的实现机制中Fragment和Activity会被分别实例化为两个不相干的对象,他们之间的联系由Activity的一个成员对象Fragmentmanager来维护.Fragment实例化后会到Activity中的Fragmentmanager去注册一下,这个动作封装在Fragment对象的onAttach()中,所以你可以在fragment中声明一些回调接口,当Fragment调用onAttach时,将这些回调接口实例化,这样Fragment就能调用各个Activity的成员

我的 Android 开发实战经验总结

我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 以前一直想写一篇总结 Android 开发经验的文章,估计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟见肘.近日,思路较为明朗,于是重新操起键盘开始码字一番.先声明一下哈,本人不是大厂的程序猿.去年毕业前,就一直在当前创业小团队从事自己热爱的打码事业至今.下面总结是建立在我当前的技术水平和认知上写的,如有不同看法欢迎留下评论互相交流. 1.理解抽象,封装变化 目前 Android 平台上绝大部分开发

Android之使用Android-query框架开发实战(一)_Android

开发Android使用Android-query框架能够快速的,比传统开发android所要编写的代码要少得很多,容易阅读等优势.  下载文档及其例子和包的地址:http://code.google.com/p/android-query/  以下内容是我学习的一些心得分享: 第一节: // 必须实现AQuery这个类 AQuery aq = new AQuery(view); // 按顺序分析:取得xml对应控件id,设置图片,设置可以显示,点击事件(方法someMethod必须是public

《Android 平板电脑开发实战详解和典型案例》——2.4节动作条——ActionBar

2.4 动作条--ActionBarAndroid 平板电脑开发实战详解和典型案例Android 3.0正式引入了ActionBar控件,抛弃了传统的导航功能,使用软件按钮取代了物理主屏.菜单.后退等按钮,规范了应用程序的导航设计.向开发人员提供了一个相对较新的导航控件,提供了更丰富的功能. 本节将介绍动作条ActionBar的基础知识与简单应用.主要内容是显示选项菜单和提供标签页的切换方式的导航以及提供下拉列表条目导航的操作. 2.4.1 显示选项菜单基本知识ActionBar上有空间时才会显

Android之使用Android-query框架开发实战(一)

开发Android使用Android-query框架能够快速的,比传统开发android所要编写的代码要少得很多,容易阅读等优势. 下载文档及其例子和包的地址:http://code.google.com/p/android-query/ 以下内容是我学习的一些心得分享: 第一节: // 必须实现AQuery这个类 AQuery aq = new AQuery(view); // 按顺序分析:取得xml对应控件id,设置图片,设置可以显示,点击事件(方法someMethod必须是public修饰

InfoPath开发实战(2):获取XML文件中的数据

本节的内容: 如何在InfoPath中使用数据连接来从XML文件中获取数据 如何通过代码来修改数据连接中的XML文件路径 打开Visual Studio 2008,以"InfoPath 2007表单模板"为项目模板新建一个项目. 项目创建完后,就会看到一个空空如也的mainifest.xsf文件,这就是InfoPath表单的设计区域,我们可以使用"工具箱"和"版式"面板来设计表单. 我们先不急于设计表单,而是添加一个数据连接.为了让示例更加有趣,

.NET分布式架构开发实战之三 数据访问深入一点的思考

上篇文章讲述在设计之初,Richard所画出的一些草图,本篇对之前的草图做了进一步的思考. 本篇的议题如下: 1.草图的一些问题在哪里 2.重审之前项目中数据层的问题 3.思维的一点突破 4.回首再看数据访问层 1.草图的一些问题在哪里 开发实战之三 数据访问深入一点的思考-分布式爬虫实战"> 当Richard把草图画出来了之后,想到了另外的一个问题:在DAL数据层之间提供的那个接口层到底应不应该是Services Interface.其实这个接口层是普通的Interface层还是Serv

.NET分布式架构开发实战之二 草稿设计

前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1.第一个数据层草图的提出 2.对数据访问层的思考 3.第二个数据层草图的提出 1.数据层草图的提出 Richard开始着手设计,一开始他没有就立刻在自己的计算机开始敲代码.而且采用笔+纸开始构思. 因为他认为:写程序不是什么时候都得上机,脑子里面想什么的才是最重要的,往往很多时候,在设计程序时,首先在头脑中就已经把整个功能已经实现了,甚至代码的详细编写都已经在头脑中走了一遍,并且在头脑中"运行

SpringSide开发实战(八):不是结局的结局,谈谈程序员的境界

SpringSide是个好东西,对我来说,它的好主要体现在两个方面:一.它提供了一个敏 捷开发的框架,省去了我自己整合Spring.Hibernate.Struts.ActiveMQ等等开源组件的 时间,而且还是最佳实践:二.它指导了我的学习目标,在SpringSide中整合的各种组件, 都是在同一类组件中最优秀的,而且要想熟练使用这些组件,都必须对它们进行深入的系统 的学习. 本来以为我会在SpringSide开发实战系列中写更多的文章,但是写到现在,我认为应该 要写结局了,为什么呢?因为在使