Android开发之Fragment的介绍、使用及生命周期
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 theFragmentManager
意思是使用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的介绍、使用及生命周期的更多相关文章
- Android开发之Fragment
一.Fragment生命周期: 二.动态添加Fragment的三步: 1.获得Fragment的管理者FragmentManager FragmentManager fragmentManager = ...
- android开发之Fragment加载到一个Activity中
Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Frag ...
- Android开发之Fragment传递參数的几种方法
Fragment在Android3.0開始提供,而且在兼容包中也提供了Fragment特性的支持. Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自己定义Fragmen ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
随机推荐
- 三分钟学会CSS3中的FLEXBOX布局
原文地址,保护版权,请勿转载:http://page.factj.com/blog/p/2574 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现 ...
- JSP编程中常用的JavaScript技术(转载)
1.<tronMouseOver=this.style.backgroundColor=’#FFFFFF’ onMouseOut=this.style.backgroundColor=”> ...
- HowTo: SVN undo add without reverting local changes
Reference: http://stackoverflow.com/questions/5083242/undo-svn-add-without-reverting-local-edits svn ...
- the evaluation period for visual studio trial edition has ended的解决方法-转发
首先献上自己收集的Visual studio 2008序列号: Visual Studio 2008 Professional Edition: XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4 ...
- gulp-less学习教程
过程安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务node.npm安装 自己搜全局安装gul ...
- 最近在无线USB网卡投入比较大
第一次(40): 乐光N18网卡 17 5米USB延长线 10 DVD2 3 运费10 第二次(30): 8187L主板13 5DB/6DB全向天线 5 外壳FREE 运费12 第三次(20): 8D ...
- 2014年度辛星css教程夏季版第七节
本小节我们研究浮动的问题,浮动使得布局更加灵活,虽然我们前面也有关于布局的讲解,但是它们提供的内容还是太有限了,要想获得更强大的布局,还必须使用浮动才能完成更灵活的布局. ***********浮动* ...
- 如何解决jenkins中shell脚本明明执行失败却不自行退出,且构建结果仍然显示success的问题??
首先,需要明确shell命令执行结果$?为0或者非0仅能代表此执行语句是否顺利执行了,例如: 执行语句:adb connect 192.168.XX.XX 执行结果:unable to connect ...
- 模拟DLL加载
#include <stdio.h> #include <malloc.h> #include <sys/stat.h> typedef int (*PFUNC)( ...
- java 动态代理理解
动态代理,顾名思义就是动态创建一个代理对象,无需手动为被代理类创建一个代理类,java的动态代理通过Proxy类和Invocation接口实现,代码如下: //被代理接口 public interfa ...