Fragment官网介绍-http://developer.android.com/guide/components/fragments.html

郭大神的使用实例文章:http://blog.csdn.net/sinyu890807/article/details/13171191

1.Fragment简介及两个版本介绍

Fragment是Android3.0(API 11)引入的。

Fragment和Activity的关系(引用官网原话):You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities

Fragment分为android.app.Fragment(framework version)和android.support.v4.app.Fragment(support version)。

假如App的最小API是11,那么最好使用android.app.Fragment。

假如App为了兼容2.3等2.0的Android版本,那么就使用android.support.v4.app.Fragment。

不过现在的2.3市场占用率已经很低了,Android的API 22都发布了,新开发的app完全可以使用android.app.Fragment。

使用android.app.Fragment和android.support.v4.app.Fragment在开发中有一些不同,官方原话:

The main differences when using this support version instead of the framework version are:

  • Your activity must extend FragmentActivity
  • You must call getSupportFragmentManager() to get the FragmentManager

意思是使用android.support.v4.app.Fragment的时候,1.activity必须继承FragmentActivity  2.在获取FragmentManager的时候,使用getSupportFragmentManager()方法。

容易出现错误的地方:一个app中不同的Fragment使用不同的Fragment版本,会造成使用一些方法的时候,报错

The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, AnotherFragment)

把引入的Fragment版本修改成一样的就不会报错了。

2.Fragment的使用

在Activity中显示Fragment、替换Fragment以及实现返回到上一个Fragment

a.在MainActivity中显示PlaceholderFragment

 import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
}

b.MainActivity中使用AnotherFragment替换PlaceholderFragment,通过点击按钮实现Fragment的替换显示。

 public class PlaceholderFragment extends Fragment {

     public PlaceholderFragment() {
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
rootView.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.container, new AnotherFragment()).commit();
//addToBackStack(tag)方法,把这个Fragment加入到backStack中,实现返回。
}
});
return rootView;
}
}

c.从AnotherFragment返回到PlaceholderFragment,通过点击按钮实现;同时在PlaceholderFragment中的addToBackStack()方法,实现了按Back键返回操作。

 public class AnotherFragment extends Fragment {

     @Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
View root=inflater.inflate(R.layout.anotherfragment, container,false); root.findViewById(R.id.btnReturnFragment).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
getFragmentManager().popBackStack(); //当前Fragment弹出BackStack,显示上一个Fragment。
}
});
return root;
} }

3.Fragment的生命周期

引用官网的生命周期图

在开发过程中,一般实现onCreate(),onCreateView(),onPause()方法就可以满足需求了。

Android开发之Fragment的介绍、使用及生命周期的更多相关文章

  1. Android开发之Fragment

    一.Fragment生命周期: 二.动态添加Fragment的三步: 1.获得Fragment的管理者FragmentManager FragmentManager fragmentManager = ...

  2. android开发之Fragment加载到一个Activity中

    Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Frag ...

  3. Android开发之Fragment传递參数的几种方法

    Fragment在Android3.0開始提供,而且在兼容包中也提供了Fragment特性的支持. Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自己定义Fragmen ...

  4. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  5. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  6. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  7. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  8. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  9. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

随机推荐

  1. java中进制之间的转换

    //十进制转其他进制 Integer.toHexString(10); //将10转换为十六进制,返回字符串类型 Integer.toOctalString(10); //将10转为八进制,返回字符串 ...

  2. 第28条:利用有限制通配符来提升API的灵活性

    参数化类型是不可变的.对两个不同类型T1和T2而言,List<T1>与List<T2>没有父子类型关系. 考虑: public class Stack<E> { p ...

  3. 防火墙,svn服务器端安装(yum),使用

    yum install subversion 查看安装位置 rpm -ql subversion 结果如下: svn在bin目录下生成了几个二进制文件 可以查看svn的使用方法 svn --help ...

  4. win7 64 安装Oracle 11G 、使用PLSQL进行连接 标准实践

    第一步: 安装oracle 服务,两个解压包,分别解压后 合并到一个文件夹,点击exe安装 (安装过程中如遇到PATH问题,直接忽略即可) 第二步:使用SQLPlus 测试是否成功 安装成功:CMD ...

  5. this在JavaScript中的工作范围

    this在JavaScript中的工作范围 在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的. var fullname = 'Fu';va ...

  6. CSS3制作hover下划线动画

    1.前几天看到Hexo的next主题标题hover效果很炫,自己尝试写了一个,另一个是next的实现,照例先上图 2.实现小黑科技 <div> <a href="javas ...

  7. if (!floor) 小明.跳楼(); 请问小明会在哪些楼层跳楼?

    博客已经迁移到www.imyzf.com,本站不再更新,请谅解! 看到标题请先思考一下这个奇葩的问题..答案在文章最后揭晓.. 会出现这个问题的起源是这样的,一个同学问我: int main() { ...

  8. Delphi新语法和ifthen的扩展联想

    Delphi之前已经重载了好多个ifthen函数 Math单元 ): Integer; overload; inline; ): Int64; overload; inline; ): UInt64; ...

  9. 【JPA】两种不同的实现jpa的配置方法

    两种不同的实现jpa的配置方法 第一种: com.mchange.v2.c3p0.ComboPooledDataSource datasource.connection.driver_class=co ...

  10. 关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)

    JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了.直接从数组开始. 数组: 1.声明 int [] a; 在声明的过程中,并没有分配空间给数组.我们可以在声明的同时,用new来分配相应 ...