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,一经查实,立即删除!

相关文章

matlab中find()函数用法

一.基本用法 返回矩阵或向量中非零元素的索引 注意&#xff1a;matlab中下标从1开始 举例&#xff1a; &#xff08;1&#xff09;向量 返回非零元素下标 find&#xff08;vector&#xff09; x[1 2 3 0 0 6 7 8 9]; find(x)ans 1 2 3 6 7 8 9返回前…

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

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

python set判断一个键是否存在_python redis 有序集合sorted set检查某个键是否存在

redis有序集合(Sorted Set)命令ZADDZREMZCARDZCOUNTZSCOREZINCRBYZRANGEZREVRANGEZRANGEBYSCOREZREVRANGEBYSCOREZRANKZREVRANKZREMRANGEBYRANKZREMRANGEBYSCOREZINTERSTOREZUNIONSTORE从上面命令中看到&#xff0c; redis的有序集合(Sorted Set)没有命令判断键是否存在于有序集…

软件过程改进之百科名片

软件过程改进/过程改进&#xff08;Software Process improvement&#xff0c;SPI&#xff09;帮助软件企业对其软件(制作)过程的改变(进)进行计划、(措施)制定以及实施。他的实施对象就是软件企业的软件过程&#xff0c;也就是软件产品的生产过程&#xff0c;当然也包括软件维…

python实现计算字符串或列表中每个字符出现的次数,并打印出现次数最多的字符

chars[a,c,x,d,p,a,m,q,s,t,p,a,t,c,c] char1sabcdcdefasbcd dict{} #创建一个空字典 for x in chars: #for循环遍历列表或字符串&#xff0c;如果字符在字典中则value加1&#xff0c;如果不在则创建&#xff08;key,value),key字符&#xff0c;value1if dict.get(x)None:dict…

基于 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…

RedMine项目管理系统邮件推送设置(Windows环境)

RedMine项目管理系统有邮箱推送功能&#xff0c;当Bug&#xff0c;安全漏洞等内容被修改、解决、评论的时候&#xff0c;系统会通过邮件 及时的通知你的团队和客户。邮件通知的环节、形式、时间、接受人均可定制&#xff0c;功能十分实用。 下面是针对windows系统环境下安装的R…

python的 数组 储存_Python的数组储存

import timemember["小甲鱼","小布丁","黑夜","迷途","伊静"]print(member,"\n")member[2,1,3,5,4]print(member,"\n")member.sort()empty[] # 创建空列表print(member) #向列表添加元素.member.append…

jquery in action 学习笔记

1 面对对象的编程 1.引用传递 在javascript中,string int Boolean 不是按引用进行传递的.而对象和数组是按引用传递的. 示例: // Create an array of itemsvar items new Array("one", "two", "three");// Create a reference to the array of …

matlab实现冲激函数(分数处冲激也行)

clear all; close all; b8; a3; syms X t; tvb/a-3:0.001:b/a3; %定义时间向量 X dirac(a*t-b); Xtsubs(X,t,tv);%调用matlab内置函数 subs(s,old,new),将X中的t替换为tv Xt(find(Xtinf))1; %冲激处幅值置为1 figure(1); plot(tv,Xt);只需更改参数a与b就可以实现任意位置的冲激…

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

两种求集合全部子集的方法

如果我们有一个求集合的所有子集(包括集合自身)的需求&#xff0c;即有一个集合s,包括两个元素 <a,b>&#xff0c;则其所有的子集为<a,ab,b>. 不难求得&#xff0c;子集个数sn与原集合元素个数n之间的关系为&#xff1a;sn2^n-1。 本文分别讲述两种实现方法&#x…

ch341a编程和ttl刷机区别_土豪金CH341a编程器 开箱晒物

土豪金CH341a编程器 开箱晒物2019-07-20 11:00:0025点赞119收藏7评论你是AMD Yes党&#xff1f;还是intel和NVIDIA的忠实簇拥呢&#xff1f;最新一届#装机大师赛#开始啦&#xff01;本次装机阵营赛分为3A红组、intel NVIDIA蓝绿组、混搭组还有ITX组&#xff0c;实体or虚拟装机都…

python爬虫爬取百度首页

import requests #导入requests模块 #利用爬虫代码爬去百度首页 #如果当前python文件作为入口程序执行时&#xff0c;则执行if语句下的代码 if __name____main__:# 指定URLurl https://www.baidu.com# 进行UA伪装&#xff0c;模拟浏览器,注意要将相应的User-Agent封装在一个…

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

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

POJ 2187 Beauty Contest

旋转卡壳求最远点对&#xff1b; #include<iostream> #include<cmath> using namespace std; int n,k; double dt; typedef struct point {double x,y;point(double xx0,double yy0):x(xx),y(yy){} }vector; point p[50010],q[50010]; struct line {vector v; }li,…

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

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

XHTML标签的嵌套规则

XHTML 的标签有许多&#xff1a;div、ul、li、dl、dt、dd、h1~h6、p、a、addressa、span、 strong……我们在运用这些标签搭建页面结构的时候&#xff0c;是可以将它们无限嵌套的&#xff0c;但是&#xff0c;嵌套也需要有一定规则&#xff0c;不能任由网站设计师的个人习惯胡乱…

python爬虫实现网页采集器

import requests #导入requests模块 #UA&#xff1a;User-Agnet:请求载体身份标识 #UA检测&#xff1a;各大门户网站的服务器都会检测请求载体的身份标识&#xff0c;如果请求载体的身份标识为某一款服务器&#xff0c; #则该请求为正常请求&#xff0c;如果请求载体的身份标识…

mongodb备份oplog_MongoDB 备份(mongodump)与恢复(mongorestore)

MongoDB 备份(mongodump)与恢复(mongorestore)MongoDB数据备份在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。mongodump命令可以通过参数指定导出的数据量级转存的服务器。语法mongodump命令脚本语法如下&#xff1a;>mongodump…