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 ...
随机推荐
- 微信网页授权demo1
要授权首先要网页域名授权 然后就index.php代码如下 <?php require_once("./function.php"); $url = 'http://'.$_ ...
- 设置程序PrivatePath,配置引用程序集的路径(分离exe和dll)
原文:设置程序PrivatePath,配置引用程序集的路径(分离exe和dll) 有时候我们想让程序的exe文件和dll文件分开在不同目录,这时候可以有3种方法 1.在app.config中配置 &l ...
- ubuntu 安装 lrzsz 上传下载
原文:ubuntu 安装 lrzsz 上传下载 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/article/details/808223 ...
- [运维]Dell R710 raid配置 标签: raid运维 2017-04-15 19:35 581人阅读 评论(16)
Dell R系列的一些服务器,raid的配置都大同小异,公司大部分的服务器,都是Dell R710型号的,这个型号的raid界面配置起来还是很简单的,下面来跟随小编体验一下raid如何配置吧.ps:图 ...
- 【arduino】anroid的app与arduino的ch05,进行蓝牙通信遇到的问题
Arduino程序上传不成功 显示系统找不到指定文件 错误信息显示是 avrdude: ser_open(): can't open device "\\.\COM1": 系统找不 ...
- MaxCompute技术人背后的故事:从ApacheORC到AliORC
2019大数据技术公开课第一季<技术人生专访>来袭,本季将带领开发者们探讨大数据技术,分享不同国家的工作体验.本文整理自阿里巴巴计算平台事业部高级技术专家吴刚的专访,将为大家介绍Apach ...
- V8引擎实现标准ECMA-262(三)
推荐英文原址ECMA-262 3.构造函数 构造函数除了通过指定的模式创建对象以外,还有另外一个好处--它能够自动设置新创建对象的原型对象,这个原型对象存储在构造函数的Prototype属性中. 例如 ...
- #define 和常量 const 的区别
const 后的常量,程序对其中只能读不能修改. #include <iostream> using namespace std; int main() { const double pi ...
- React 入门笔记
一.什么是React React: A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES 上面的话直译过来就是,React是一个用于构建用户界面的Java ...
- hdu5289 RMQ+二分
RMQ预处理最大值,最小值,然后对于每一点,二分可能满足的区间长度,长度-1就是该店开始的区间满足的个数. #include<stdio.h> #include<string.h&g ...