Android----Fragments详解

Fragments 概念是在Android3.0版本就已经有了,3.0版本是Tab(平板)专用,后来在4.0以上的版本继续沿

用Fragments,改善了Activity的灵活性。

       

        在没有Fragments之前,一个屏幕就只能放一个Activity,有了Fragments之后,一个屏幕也只能放一个Anticity,但Activity里可以包含多个Fragments,Fragments因此也被成为子Activity,但是Fragments不是Activity的subClass,Fragments直属Object子类。

 

下面例子一个Activity包含两个Fragments 左边一个现实Title  右边一个现实相应的content。

 

 

        Fragments 必须寄生在Activity里面,不能脱离Activity而存在,与Activity一样,Fragments同样具有自己的生命周期,其生命周期比Activity更复杂,但是Fragments的生命周期受Activity影响,随着Activity结束而结束。

 

  

         

1.onAttach(Activity) 在Fragments和Activity关联时候回调,可以进行一些限制条件的判定。

2. onCreate(Bundle) 和Activity一样

3. onCreateView(LayoutInflater, ViewGroup, Bundle) View在这里初始化,并返回给Fragments

4. onActivityCreated(Bundle) 在Activity.onCreate().也就是Activity初始化后,会会掉Fragments这个函数

5. onStart()  

6. onResume()  

1. onPause()  

2. onStop()  

3. onDestroyView() 

4. onDestroy()  

 

5. onDetach()  

 

Demo示例:

   主Activity

   

package com.example.fragmenttest;import com.example.fragmenttest.FragmentTitle.OnTtileClickListener;import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;/*** 主Activity* @author ccf* */
public class MainActivity extends Activity implements OnTtileClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic void onTtitleClick(String content) {FragmentContent content2 = FragmentContent.getInstance(content);getFragmentManager().beginTransaction().replace(R.id.mContent, content2).commit();}@Overridepublic void onBackPressed() {// TODO Auto-generated method stubsuper.onBackPressed();}
}

 

 

XML布局文件

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"
><fragmentclass="com.example.fragmenttest.FragmentTitle"android:id="@+id/titleList"android:layout_width="0dip"android:layout_height="fill_parent"android:layout_weight="1"/><FrameLayoutandroid:id="@+id/mContent"android:layout_width="0dip"android:layout_height="fill_parent"android:layout_weight="2"/></LinearLayout>

 

  fragment  只是一个占位符,class属性,标志该占位符代表哪个Fragments.

  FrameLayout 作为父容器,放用来置Fragments。

 

 

FragmentTitle  Activity左边的Title列表,继承了ListFragment。   ,ListFragment持有一个ListView

 package com.example.fragmenttest;import android.annotation.SuppressLint;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;@SuppressLint("NewApi")
public class FragmentTitle extends ListFragment {private final static String title[] = { "龙骑士", "死灵骑士", "死神来了", "第一滴血" };private final static String content[] = {" 曾经和平富饶的国度阿拉盖西亚,如今陷在邪恶国王(约翰·马尔科维奇 John Malkovich 饰)的暴政统治下,期待神灵解救敢怒不敢言的人民。一日,农家少年伊拉贡(艾德·斯皮尔斯 Ed Speleers 饰)在林中拾获一枚奇石,不想竟是一枚龙卵,孵出一只蓝色飞龙。伊拉贡为小龙取名“萨菲拉”,遇到先知布鲁姆(杰瑞米·艾恩斯 Jeremy Irons 饰)后,才明白这是一场怎样的机缘——曾经守护这片土地的龙骑士应该回来了,带领人民找回自由。在布鲁姆的指导下,伊拉贡开始学习剑术和驭龙技巧,慢慢从一个普通少年成长为担当重任的龙骑士,前路危险重重,前路通向光明…… ","莫罗(伊德瑞斯·艾尔巴 Idris Elba 饰)请求布雷斯把小孩丹尼带来神殿以避免恶魔夺取他的灵魂,作为回报他将驱除布雷斯身上的诅咒。丹尼是魔鬼罗尔科的儿子,罗尔科为了把自己的魔力植入儿子体内正派卡里跟追踪逃跑途中的母子两人。正当母子俩被困在采石场的时候,布雷斯到来,他体内的天使爆发了出来,压制住了卡里根。他变成了恶灵骑士,毫不手软的把对手撕成碎片。当战争结束时,三人前往神殿,同时,罗尔科也救醒了死亡边缘的卡里根,并赋予他更可怕的摧毁力,让他再去把丹尼找回来。 在神殿里,莫罗履行协议把布雷斯体内的扎萨罗斯驱赶了出来。但正当他做法时,神殿的牧师试图杀死丹尼——他认为丹尼就是恶魔。还没等他们行动,卡里根就到了。把丹尼带去见了","某公司组织一次远游,虽然员工们各怀心事,不过他们还是踏上了欢乐的旅途。在经过一座巨大的吊桥时,年轻人山姆(Nicholas D'Agosto 饰)突然看到幻象,幻象中大桥开始垮塌,包括他、同事、朋友在内无数人在这起事故中遇难。当他从幻象中醒来时,周边的种种迹象表明那场灾难即将到来。慌乱之中,他和朱莉(艾玛·贝尔 Emma Bell 饰)、皮特(Miles Fisher 饰)、坎蒂丝(Ellen Wroe 饰)、奥利维亚(Jacqueline MacInnes Wood 饰)等8个人下了车。灾难随即发生,山姆等人成为车上仅有的幸存者。 但是命运并未偏袒这几名幸运儿,死神仍时刻逡巡在他们的周围。死神来了,无论逃到天涯海角也没有用…"," 退伍军人兰博(西尔维斯特•史泰龙Sylvester Stallone 饰)从越南回国,他回到已显得陌生的原居小镇,当地警长(布莱恩•丹内利 Brian Dennehy 饰)看到这个退伍军人的第一眼起,就开始对兰博百般挑剔,甚至将他带回警局肆意侮辱,不堪忍受责打的兰博袭警之后逃跑。警长召集大批警察展开对兰博的追捕,兰博逃至荒山野林之中,不断用自己在越战中掌握的游击战术对警察展开反击,他了一辆武器运输车返回小镇烧毁了商店,法律和武器都不能阻止兰博了。兰博在越战时的长官上校(理查德•克里纳 Richard Crenna 饰)出现,劝说兰博放下枪械,愤懑已久的兰博吼出了自己的困惑与不甘…… " };@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);getListView().setBackgroundColor(getResources().getColor(android.R.color.darker_gray));setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, title));}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return super.onCreateView(inflater, container, savedInstanceState);}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stubsuper.onListItemClick(l, v, position, id);OnTtileClickListener listener = (OnTtileClickListener) (getActivity());listener.onTtitleClick(content[position]);}@Overridepublic void onPause() {super.onPause();}public interface OnTtileClickListener {public void onTtitleClick(String content);}
}

 

 

FragmentContent是右边详细内容显示区域。

 

package com.example.fragmenttest;import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;@SuppressLint("NewApi")
public class FragmentContent extends Fragment {private String strContent;public static FragmentContent getInstance(String strContent) {FragmentContent content = new FragmentContent();content.strContent = strContent;return content;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {super.onCreateView(inflater, container, savedInstanceState);ScrollView scrollView = new ScrollView(getActivity());TextView mTextView = new TextView(getActivity());mTextView.setPadding(5, 5, 5, 5);mTextView.setTextSize(15);mTextView.setText(strContent);scrollView.addView(mTextView);scrollView.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_light));return scrollView;}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}}

 

     MainActivity类很简单。  onCreate(Bundle savedInstanceState)函数只是简单调用setContentView().,加上实现了FragmentTitle 中自定义的 OnTitleClickListener接口外,并未做什么其他初始化,FragmentTitle的初始化是在他自己的 onActivityCreated(Bundle savedInstanceState) 中进行的。

当Activity 调用onCreate()后,就会调用FragmentTitle onActivityCreated(Bundle savedInstanceState)   来完成左边标题列表的初始化。

 @Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);getListView().setBackgroundColor(getResources().getColor(android.R.color.darker_gray));//设置背景颜色setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, title));//调用该方法初始化列表
    }

 

mainActivity 实现FragmentTitle 中自定义的 OnTitleClickListener 接口,FragmentTitle就可以可以在

 onListItemClick(ListView l, View v, int position, long id)

 

@Overridepublic void onTitleClick(String content) {FragmentContent content2 = FragmentContent.getInstance(content);getFragmentManager().beginTransaction().replace(R.id.mContent, content2).commit();}

 

 @Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stubsuper.onListItemClick(l, v, position, id);OnTitleClickListener listener = (OnTitleClickListener) (getActivity());listener.onTitleClick(content[position]);}

 

     如何对Activity中的Fragment进行操作呢?

     在onTitleClick(String content)回调函数中,调用getFragmentManager()函数,获取FragmentManager实例,再通过FragmentManager 的beginTransaction()函数获得FragmentTransaction实例。

    利用FragmentTransaction实例  就可以对Fragments实例进行操作,有以下几个基本操作

add()  把Fragments实例和Activity关联起来

hide()  把Activity中存在的Fragments影藏起来,对应盈利个函数show()  把已经被影藏的Fragments显示出来

remove() 把Activity中的Fragments移除掉。

replace() 用指定Fragments的替换另一个Fragments 相当于remove()+add()

commit() 以上操作并需经过commit() 条件该transaction(事务)后才生效。

 

 

Fragments和Activity之间的通讯:

      1.在Activity中可以通过FragmentManager 两个方式获取到相应的Fragments

       findFragmentById(int id)    通过xml布局文件中注册的id获取该实例,这种Fragments必须在布局文件正声明其id

       findFragmentByTag(String tag)  通过tag找到实例  ,tag是改Fragments实例在被 FragmentTransaction#add(int containerViewId, Fragment fragment, String tag)  作为最后一个参数传入,tag要保持其唯一性,因为他是对应Fragments实例的唯一标识。

 

      2. Fragments中可以通过getActivity()获取到对应的Activity实例

 

 

 

 

 

转载于:https://www.cnblogs.com/chenchuangfeng/archive/2013/06/02/3113608.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop Mapreduce分区、分组、二次排序过程详解

2019独角兽企业重金招聘Python工程师标准>>> 1、MapReduce中数据流动 &#xff08;1&#xff09;最简单的过程&#xff1a; map - reduce &#xff08;2&#xff09;定制了partitioner以将map的结果送往指定reducer的过程&#xff1a; map - partition - redu…

基于 OpenFire 的TVBox管理平台开发笔记

目录 一、開發環境設置.... 3 1.1 JDK 安裝.... 3 1.2 MySql Server安裝.... 4 1.3 OpenFire安裝.... 6 1.4 Openfire Admin 功能.... 14 1.4.1 用戶摘要&#xff1a;.... 16 1.4.2 組摘要&#xff1a;.... 16 1.4.3 用戶組管理&#xff1a;.... 17 1.4.4 發送管理消息&#xf…

IIS错误与解决方法

转载于:https://www.cnblogs.com/NFFF/archive/2013/06/03/IIS%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%94%99%e8%af%af%e4%b8%8e%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95.html

最大后验估计_PR Ⅱ:贝叶斯估计/推断及其与MAP的区别

Probabilistic in Robotics Ⅱ: Bayesian Estimation/Inference统计推断旨在根据可观察到的事物来了解不可观察到的事物。即&#xff0c;统计推断是基于一个总体或一些样本中的某些观察变量&#xff08;通常是影响&#xff09;得出结论的过程&#xff0c;例如关于总体或样本中某…

深入理解并行编程-分割和同步设计(四)

原文链接 作者&#xff1a;paul 译者&#xff1a;谢宝友&#xff0c;鲁阳&#xff0c;陈渝 图1.1&#xff1a;设计模式与锁粒度 图1.1是不同程度同步粒度的图形表示。每一种同步粒度都用一节内容来描述。下面几节主要关注锁&#xff0c;不过其他几种同步方式也有类似的粒…

string类的实现(构造函数,析构函数,运算符重载)

String类的代码&#xff1a;class String { public:String(char* str""){_str new char[strlen(str) 1];strcpy(_str, str);}String(const String& str){_str new char[strlen(str._str) 1];strcpy(_str, str._str);}~String(){delete[] _str;}String& o…

html网页设计一个简单的用户登录页面

结果 代码 login.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>用户登录页面</title><link rel"stylesheet" href"./css/login.css"><script src"j…

ip聚合简介

练习一 本题选择&#xff1a;D 解释如下&#xff1a; 人事部 205.67.159.1110 0000 /27 培训部 205.67.159.1101 0000 /28 销售部 205.67.159.1100 0000 /28 先是培训部与销售部做IP聚合&#xff08;只有网络前缀位数相同才可以做ip聚合&#xff09; 保留相同的位数&…

微信公众平台消息接口开发(34)桃花运测试

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 桃花运 作者&#xff1a;方倍工作室 原文&#xff1a;http://www.cnblogs.com/txw1958/archive/2013/06/06/weixin-if34-peach-blossom-luck.html 桃花运&#xff0c;一般指得到异性缘的运气。而这种运气又常常蕴涵在…

sharepoint 2013 个人站点母版

最近做了个项目&#xff0c;&#xff0c;sharepoint 个人站点要求定制&#xff0c;&#xff0c;搞了好久不知引用的模板 在何位置&#xff0c;查了好多资料还是没有办法解决&#xff0c;&#xff0c;经过不懈的努力&#xff0c;终于找到了&#xff0c;现在记录下&#xff0c;做…

telnet不是内部或外部命令解决方法

在使用window系统在使用telnet命令时&#xff0c;会出现“telnet不是内部或外部命令”的错误。 这是因为windows默认没有开启telnet client 开启window的telnet客户端功能&#xff0c;命令就可以使用了。 1.打开控制面板 2.选择程序 3.选择启用或关闭windows功能 4.将telnet…

C# 自定义箭头组件

C#自定义箭头组件&#xff0c;效果如图&#xff1a; 实现的功能&#xff1a; 1&#xff09; 箭头方向属性左、右、上、下&#xff1b; 2&#xff09; 颜色渐变&#xff0c;且颜色任意调整&#xff1b; 3&#xff09; 箭头大小位置任意调整&#xff1b; 4&#xff09; 其他。 主…

Android的debug.keystore拒绝访问导致的生成异常及解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 构建Android应用程序的时候输出异常:[apkbuilder] keytool 错误: java.io.FileNotFoundException: C:\Users\my\.android\debug.keystore(拒绝访问.) 导致BUILD FAILED. ##异常原因: Android要求所有的应用程序必须有…

C语言猜数字游戏

程序代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<windows.h> #include<stdlib.h> #include<time.h> void menu() {printf("***********************\n");printf("** …

动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理

为什么80%的码农都做不了架构师&#xff1f;>>> 一&#xff1a;在看此篇代码示例前&#xff0c;先看静态代理&#xff0c; 链接地址&#xff1a;http://my.oschina.net/dyyweb/blog/656760 &#xff08;代码示例&#xff09; 二&#xff1a;JDK动态代理 动态…

C语言扫雷游戏简单实现

文章目录前言一、代码思路二、代码实现1.引入库2.具体代码见以下链接&#xff0c;免费下载&#xff0c;无需慌张3.运行结果前言 本篇文章为使用C语言的easyX库函数实现扫雷小游戏 一、代码思路 1.设置扫雷地图 用一个二维数组表示扫雷地图 初始化二维数组 埋雷&#xff0c;-1…

VS2010中C#添加图片(资源)

做工具栏的时候要用到图片。图标这样的东西从文件夹里导入显得有些山寨。VS的图形化操作很方便。但是我们的程序要动态载入图标。所以不能拖拽了~ 下面是添加图片的方法&#xff1a; 1》右击项目 》 属性 选择资源选项卡 如果没有资源的话&#xff0c;显示右上图。点击创建一个…

字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到

字符串左旋问题 问题描述 左旋字符串中的k个字符。例如 ABCD左旋一个字符得到BCDA &#xff0c;ABCD左旋两个字符得到CDAB 解法一&#xff1a;暴力破解法 先左旋一个字符 将字符串首个字符保存在temp中 字符串其余字符向左移动一个单位将temp中保存的字符放到字符串结尾 重复…

浏览器是如何工作的系列:渲染引擎

渲染引擎的功能就是渲染&#xff0c;在浏览器上显示请求的内容。 默认情况下&#xff0c;渲染引擎可以显示HTML和XML文档和图像。他也可以显示其他类型的插件(浏览器扩展)。例如显示PDF使用PDF浏览器插件。 我们将用一个特殊的章节来讨论插件和扩展。在这个章节中&#xff0c;我…

富丽的SUSE Linux 10.3(1)

作者: hr127 出自: http://www.linuxdiyf.com版权声明&#xff1a; 原创作品&#xff0c;容许转载&#xff0c;转载时请务必以超链接编制标明文章 原始出处 、作者信息和本声明。不然将追究执法责任。 转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1976023.htm…