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
Fragment开发实战(一)的更多相关文章
- Fragment开发实战(二)
由于在Android的实现机制中Fragment和Activity会被分别实例化为两个不相干的对象,他们之间的联系由Activity的一个成员对象Fragmentmanager来维护.Fragment ...
- 我的 Android 开发实战经验总结
我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...
- chrome拓展开发实战:页面脚本的拦截注入
原文请访问个人博客:chrome拓展开发实战:页面脚本的拦截注入 目前公司产品的无线站点已经实现了业务平台组件化,所有业务组件的转场都是通过路由来完成,而各个模块是通过requirejs进行统一管理, ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(1)设定背景图
技术的新发展,除计算机可以接入互联网之外,平板电脑.智能手机.智能电视等其他设备均可访问互联网.在多设备时代,构建多屏体验也不是听说的那么难. 但是这也增加了学习CSS的难度?不知道如何上手,只懂一点 ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
随机推荐
- ML面试1000题系列(81-90)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 81.已知一组数据的协方差矩阵P,下面关于主分量 ...
- js面向对象开发基础
js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨. 面向对象基础——构造函数方法 var Fly = function (s ...
- NodeJS概述2-事件插件-简易爬虫
事件 events 模块 原生事件写法 /* * 1. 事件分类 * DOM0级 事件 - on + eventType * DOM2级 事件 - 事件监听 * 2. 事件构成部分有哪些? dom.o ...
- Oracle操作XML各种场景介绍
版权声明:凭栏处.潇潇雨歇. https://blog.csdn.net/IndexMan/article/details/28130961 近期在研究Oracle PLSQL中对于XML的系列操作. ...
- Effective Modern C++:07并发API
C++11的志伟功勋之一,就是将并发融入了语言和库中,因此在C++的历史上,程序员可以首次跨越所有平台撰写具有标准行为的多线程程序. 35:优先选用基于任务而非基于线程的程序设计 如果需要以异步的方式 ...
- Sentinel 1.5.0 正式发布,引入 Reactive 支持
近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...
- Codeforces 414A
题目链接 首先考虑无解的情况: n / 2 > k 或者 n==1 且 k != 0 (因为两个数的最大公约数最小为1) 然后因为有 n / 2 组(把 a[i] 和 a[i+1] 看成一组), ...
- Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐。
Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐. MINITAB 功能菜单包括:基础和高级统计工具: ...
- NSArray 查询数组中的对象
1.NSString 对象 NSArray *array =@["123", @"234" , @"345"]; NSPredicate ...
- 友盟iOS sdk整理
文档中心 :http://dev.umeng.com 集成文档:http://dev.umeng.com/analytics/ios-doc/integration 报表中心:http://www.u ...