Android记录6--ViewPage+Fragment的使用例子
Android记录6--ViewPage+Fragment的使用例子
2013年9月6日Fragment学习
Fragment这个东西,我到现在才接触到,之前没有用到过,关于Fragment这个东西在官方文档已经介绍了非常清楚了,我还特地转载了官方API的中文翻译,在这我就不浪费口舌了。简单来说,Fragment就是为满足大屏幕的而诞生的,手机屏幕小而平板屏幕就大了,屏幕一大就会产生更多的交互,这是很容易想到的,那么单纯的Activity就不能满足我们的需求了。
今天这个例子是自己做的一个小Demo,简单使用了Fragment,是跟ViewPage结合一起使用的。我想实现的效果是,左右滑动可以从一个Fragment到另一个Fragment的过渡。
看看效果图:
可以看到,两个fragment都可有控件的点击事件,如果是两个Activity我不知道怎么实现,可能会稍微麻烦一点。
简单的ViewPage布局:
/2013.09.05_ViewPage_Fragment_Demo/res/layout/activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <android.support.v4.view.ViewPager
- android:id="@+id/viewpager"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:flipInterval="30"
- android:persistentDrawingCache="animation" />
- </RelativeLayout>
/2013.09.05_ViewPage_Fragment_Demo/res/layout/viewpager1.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/guide_1" >
- <Button
- android:id="@+id/btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="54dp"
- android:background="@drawable/butten"
- />
- </RelativeLayout>
/2013.09.05_ViewPage_Fragment_Demo/res/layout/viewpager2.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/guide_2" >
- <Button
- android:id="@+id/btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="54dp"
- android:background="@drawable/butten" />
- </RelativeLayout>
再来一个适配器:
/2013.09.05_ViewPage_Fragment_Demo/src/com/wwj/vf/adapter/FragAdapter.java
- package com.wwj.vf.adapter;
- import java.util.List;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentPagerAdapter;
- /**
- * FragmentPager适配器
- * @author wwj
- *
- */
- public class FragAdapter extends FragmentPagerAdapter{
- private List<Fragment> fragments;
- public FragAdapter(FragmentManager fm) {
- super(fm);
- }
- public FragAdapter(FragmentManager fm, List<Fragment> fragments) {
- super(fm);
- this.fragments = fragments;
- }
- @Override
- public Fragment getItem(int position) {
- return fragments.get(position);
- }
- @Override
- public int getCount() {
- return fragments.size();
- }
- }
两个自定义的Fragment
这里很简单,一张背景+一个按钮
/2013.09.05_ViewPage_Fragment_Demo/src/com/wwj/vf/ui/MyFragment1.java
- package com.wwj.vf.ui;
- import com.wwj.vf.R;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.Toast;
- /**
- * 第一个Fragment
- *
- * @author wwj
- *
- */
- public class MyFragment1 extends Fragment {
- private Button btn;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.viewpager1, container, false);
- btn = (Button) view.findViewById(R.id.btn);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(getActivity(), "你点我啦,好坏!!!", Toast.LENGTH_LONG).show();
- }
- });
- return view;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- }
- @Override
- public void onPause() {
- super.onPause();
- }
- }
/2013.09.05_ViewPage_Fragment_Demo/src/com/wwj/vf/ui/MyFragment2.java
- package com.wwj.vf.ui;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.Toast;
- import com.wwj.vf.R;
- /**
- * 第2个Fragment
- *
- * @author wwj
- *
- */
- public class MyFragment2 extends Fragment {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.viewpager2, container, false);
- view.findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(getActivity(), "这个Fragment2哦,要注意了!!", Toast.LENGTH_SHORT).show();
- }
- });
- return view;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- }
- @Override
- public void onPause() {
- super.onPause();
- }
- }
好啦,在Activity里添加两个Fragment
- package com.wwj.vf;
- import java.util.ArrayList;
- import java.util.List;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.view.ViewPager;
- import com.wwj.vf.adapter.FragAdapter;
- import com.wwj.vf.ui.MyFragment1;
- import com.wwj.vf.ui.MyFragment2;
- /**
- * 主Activity,包含两个fragment
- *
- * @author wwj
- *
- */
- public class MainActivity extends FragmentActivity {
- private ViewPager vp;
- private FragAdapter adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- vp = (ViewPager) findViewById(R.id.viewpager);
- List<Fragment> fragments = new ArrayList<Fragment>();
- fragments.add(new MyFragment1());
- fragments.add(new MyFragment2());
- adapter = new FragAdapter(getSupportFragmentManager(), fragments);
- vp.setAdapter(adapter);
- vp.setCurrentItem(0);
- }
- }
简单的ViewPage和Fragment的搭配使用就这样了。

我们来看一下Fragment完整的生命周期。
- 在Fragment生命周期开始,onInflate方法被调用。要注意的是,这个方法只在我们直接用标签在布局文件中定义的时候才会被调用。我们可以在这个方法中保存一些在xml布局文件中定义的配置参数和一些属性。
- 这一步过后就轮到onAttach被调用了。这个方法在Fragment绑定到它的父Activity中的时候被调用,我们可以在这里保存它和Activity之间的引用。
- 之后onCreate会被调用。这是最重要的步骤之一。Fragment就是在这一步中产生的,可以用这个方法来启动其它线程来检索数据,比如从远程服务器中启动。
- onCreateView这个方法是在Fragment创建自己的视图结构的时候被调用,在这个方法中我们会载入Fragment的布局文件,就像我们在ListView控件中载入布局一样。在这个过程中,我们不能保证父Activity是否已经创建,所以有一些操作我们不能在这里完成。
- 可以看到,在onActivityCreated后Activity才算是建立完成。到这一步,我们的Activity就创建成功并激活了。我们可以随时使用它了。
- 下一步就是onStart了,在这里我们做的事和Activity中的onStart一样,在这个方法中Fragment虽然可以显示,但是还不能和用户进行交互,只有在onResume后Fragment才能开始和用户进行交互操作。在这个过程后,Fragment就已经启动并运行起来了。
- 也许会暂停Activity。Activity的OnPause方法会被调用。这时候Fragment的onPause方法也会被调用。
- 系统也可能会销毁Fragment的视图显示,发生这种情况时onDestroyView方法就被调用了。
- 之后,如果系统需要完全销毁整个Fragment的话,onDestroy方法就会被调用了。这时候我们就需要释放掉所有可用的连接了,因为这个时候Fragment马上就要被杀掉了。虽然是在准备销毁的过程中,但是Fragment仍然绑定在父Activity中。
- 最后一步就是把Fragment从Activity中解绑,即调用onDetach方法。
Android记录6--ViewPage+Fragment的使用例子的更多相关文章
- Android之取消ViewPage+Fragment的预加载
		用过ViewPage+Fragment组合的童鞋自然知道这个问题,没有遇到的同学祝愿你们永远不会遇到,呵呵.直接上关键代码 注释:setUserVisibleHint每次fragment显示与隐藏都会 ... 
- Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换
		一.问题描写叙述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航).主要实现方案有RadioGroup+View ... 
- Android Studio精彩案例(三)《模仿微信ViewPage+Fragment实现方式二》
		转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 写在前面的话:此专栏是博主在工作之余所写,每一篇文章尽可能写的思路清晰一些,属于博主的"精华"部分,不同于以往专栏 ... 
- 【Android UI】:Fragment官方文档
		概述 Fragment表现Activity中UI的一个行为或者一部分.可以将多个fragment组合在一起,放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity ... 
- Android开发-API指南-Fragment
		Fragments 英文原文:http://developer.android.com/guide/components/fragments.html 采集日期:2014-12-31 在本文中 设计理 ... 
- Android面试二之Fragment
		基本概念 Fragment,简称碎片,是Android 3.0(API 11)提出的,为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6. F ... 
- Android入门——UI(8)——Fragment(2)
		先演示一下如何在一个activity中放置两个Fragment,先定义两个Fragment <?xml version="1.0" encoding="utf-8& ... 
- Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置
		Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置 2013年8月14日Android记录 很多应用都会有用户设置,用户的一些偏好可以由用户来决定 ... 
- Android做法说明(3)---Fragment使用app袋或v4包解析
		Android做法说明(3)---Fragment使用app袋或v4包解析 1)问题简述 相信非常多的朋友在调用Fragment都会遇到以下的情况: watermark/2/text/aHR0cDov ... 
随机推荐
- packinfo-java的作用
			package-info.java 包的作用 1. 为标注在包上的Annotation提供便利 2. 声明包的私有类和常量 3. 提供包的整体注释说明 代码说明: package-info.jav ... 
- [OJ] Single Number II
			LintCode 83. Single Number II (Medium) LeetCode 137. Single Number II (Medium) 以下算法的复杂度都是: 时间复杂度: O( ... 
- jquery checkbox获取多个选项
			http://www.jb51.net/article/27186.htm http://www.cnblogs.com/libingql/archive/2011/11/07/2238663.htm ... 
- 错误信息:A TCP error (10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试。) occurred while listening on IP Endpoint=192.168.1.18:8002.
			百度之后,知道这个原因是端口已经被其他进程打开了 使用cmd命令,查看8002端口被哪一个程序占用了 C:\Windows\System32>netstat -ano | find " ... 
- Linux复制指定目录下的文件夹结构
			[root@ebs12vis ~]# su - applmgr[applmgr@ebs12vis ~]$ cd $APPL_TOP/inv[applmgr@ebs12vis inv]$ find . ... 
- 年末促销 Windows Azure在线充值送微软商城硬件大礼包
			春节前充值,尽享云端体验, 缤纷好礼持续进行时.即日起至2015年2月13日, 充值1000元以上即享好礼.您可以查阅WindowsAzure 官网活动页面,即刻参与活动:http://www.win ... 
- 关于开源框架GPUImage 的简单说明
			GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图片. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ... 
- 彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道
			最近有个项目要调用客户用java写的带https的webservice,对方提供了证书文件 test.pfx,我这里调用方式如下: //webservice代理类 SvcService svc = n ... 
- apache 实用配置
			1.反向代理 反向代理是指想访问目标机器,但无法直接访问,此时,可以通过与目标机器相同网络段的机器做桥接,通过访问桥接机器,访问目标机器,称为反向代理. vi httpd.conf 将代理配置开放: ... 
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
			读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ... 
