把条目添加到动作栏

你的fragment们可以向activity的菜单(按Manu键时出现的东西)添加项,同时也可向动作栏(界面中顶部的那个区域)添加条目,这都需通过实现方法onCreateOptionManu()来完成。

你从fragment添加到菜单的任何条目,都会出现在现有菜单项之后。Fragment之后可以通过方法onOptionsItemSelected()来响应自己的菜单项被选择的事件。

你也可以在fragemnt中注册一个view来提供快捷菜单(上下文菜单)。当用户要打开快捷菜单时,fragment的onCreateContextMenu()方法会被调用。当用户选择其中一项时,fragemnt的onContextItemSelected()方法会被调用。

注:尽管你的fragment可以分别收到它所添加的菜单项的选中事件,但是activity才是第一个接收这些事件的家伙,只有当activity对某个事件置之不理时,fragment才能接收到这个事件,对于菜单和快捷菜单都是这样。

处理fragement的生命周期

管理fragment的生命周期有些像管理activity的生命周期。Fragment可以生存在三种状态:

Resumed:

Fragment在一个运行中的activity中并且可见。

Paused:

另一个activity处于最顶层,但是fragment所在的activity并没有被完全覆盖(顶层的activity是半透明的或不占据整个屏幕)。

Stoped:

Fragment不可见。可能是它所在的activity处于stoped状态或是fragment被删除并添加到后退栈中了。此状态的fragment仍然存在于内存中。

同样类似于activity,你可以把fragment的状态保存在一个Bundle中,在activity被recreated时就需用到这个东西。你可以在onSaveInstanceState()方法中保存状态并在onCreate()或onCreateView()或onActivityCreated()中恢复,关于更多的保存状态的信息,请参考Activitys章节。

Fragment与Activity的生命周期中最大的不同就是存储到后退栈中的过程。Activity是在停止时自动被系统压入停止栈,并且这个栈是被系统管理的;而fragment是被压入activity所管理的一个后退栈,并且只有你在删除fragment后并明确调用addToBackStack()方法时才被压入。

然而,管理fragment的生命周期与管理activity的生命周期极其相似。你所需要去思考的是activity的生命周期如何影响fragment的生命周期。

协调与activity生命周期的关系

Activity直接影响它所包含的fragment的生命周期,所以对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。例如:当activity的onPause()方法被调用时,它所包含的所有的fragment们的onPause()方法都会被调用。

Fragment比activity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:

onAttach()

当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。

onCreateView()

当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

onActivityCreated()

当activity的onCreated()方法返回后调用此方法。

onDestroyView()

当fragment的layout被销毁时被调用。

onDetach()

当fragment被从activity中删掉时被调用。

一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

Android之基本常见知识(持续更新)//能够取得屏幕的信息
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm);
dm.widthPixels;                //取得宽像素dm.heightPixels;       //取得高像素//获取当地的日历 Calendar c=Calendar.getInstance();mYear=c.get(Calendar.YEAR);//获取年份mMonth=c.get(Calendar.MONTH);//获取月份mDay=c.get(Calendar.DAY_OF_MONTH);//获取号数mHour=c.get(Calendar.HOUR_OF_DAY);//获取小时mMinute=c.get(Calendar.MINUTE); //获取分钟//把EditText的内容设为可视或隐藏/* 设定EditText的内容为可见的 */editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());/* 设定EditText的内容为隐藏的 */editText.setTransformationMethod(PasswordTransformationMethod.getInstance()); //启动activity时不自动弹出软键盘getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);  //设置全屏(在setContentView之前设置)getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置取消全屏WindowManager.LayoutParams attrs = getWindow().getAttributes();  attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attrs); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);//设置无标题(在setContentView之前设置)requestWindowFeature(Window.FEATURE_NO_TITLE); //设置禁止手机横屏(在setContentView之前设置)setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); //调用手机默认的摄像功能,而且可以设定储存位置Intent i = new Intent("android.media.action.IMAGE_CAPTURE");  i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory(),"pic.jpg")));//解决中文乱码方法 A. 使用getBytes("") 来对汉字进行重编码,得到它的字节数组B. 再使用new String(Bytes[] , "解码方式")  来对字节数组进行相应的解码//在Android中轻松实现横竖屏的布局 竖屏的布局一般在layout下面设置;横屏的布局则在layout的同等级文件夹创建名字layout-land的文件夹。模拟器可以使用Ctrl+F11进行快速切换。 //Android横竖屏切换不重启Activityandroidmanifest.xml中的activit元素加入这个属性android:configChanges="orientation|keyboardHidden" 然后在Activity中重载以下方法:复制代码public void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubif (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {setContentView(R.layout.imageswitch);//横屏} else {setContentView(R.layout.editcontact);//竖屏}super.onConfigurationChanged(newConfig);}   复制代码卸载程序:Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");   Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);安装apk:String str = "/CanavaCancel.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);

转载于:https://www.cnblogs.com/yaowen/p/4916739.html

android Fragments详解六:处理fragement的生命周期相关推荐

  1. android Fragments详解

    android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...

  2. (转)android Fragments详解三:实现Fragment的界面

    为fragment添加用户界面 fragment一般作为activity的用户界面的一部分,把它自己的layout嵌入到activity的layout中.    一个 要为fragment提供layo ...

  3. android Fragments详解一:概述

    Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment.你 ...

  4. android Fragments详解五:与activity通讯

    与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...

  5. alert 返回页面 刷新_详解 HTML 页面原生的生命周期事件

    DOMContentLoaded,load,beforeunload,unload HTML 页面的生命周期包含三个重要事件: DOMContentLoaded -- 浏览器已完全加载 HTML,并构 ...

  6. 详解.NET Core 依赖注入生命周期

    前言 .NET Core 自带依赖注入框架,支持三种不同生命周期的注入模式: Singleton 单例模式 Scoped 区域模式 Transient  瞬时模式 但是常常不知道什么时候使用哪种模式才 ...

  7. [KANZI]详解Kanzi One应用程序生命周期事件

    添加启动逻辑 你可以用以下逻辑去在应用中定义你的启动逻辑 Kanzi在启动应用程序后立即调用Application::onStartup() 函数一次,再它加载初始化UI内容之前,可以添加需要修改已初 ...

  8. Android签名详解(debug和release)

    Android签名详解(debug和release) 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被 ...

  9. Android 动画详解-思维导图版

    转载请注明链接: https://blog.csdn.net/feather_wch/article/details/81503233 涉及视图动画(补间动画.逐帧动画).属性动画三种动画的使用方法, ...

最新文章

  1. Squid服务在实际工作中的应用、优化和流量监控
  2. 抓包工具Charles简单使用介绍(可抓取Android中app的请求)
  3. Make Even(800)
  4. Shiro 登录认证源码详解
  5. 异常解析————Parameter metadata not available for the given statement
  6. C++学习笔记系列二
  7. CSS 字体调整 font-size-adjust属性
  8. eclipse切换git分支
  9. ubuntu 双击打不开软件或者创建的快捷方式
  10. python输入一个三位数输出百位十位个位_编程实现:输入一个三位数,输出其百位、十位、个位上的数字。_学小易找答案...
  11. nssa和stub_OSPF的特殊区域--stub及totally-stub及nssa及totally-nssa详解
  12. Pyhon 登陆邮箱
  13. 操作系统课设——Windows 进程管理
  14. 同时买票是怎么实现的_候补购票和抢票有什么不同 候补购票和抢票可以同时进行吗...
  15. pycharm运行异常 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes in position 600-601: invalid contin
  16. 微软行星云计算Planetary Computer——从 STAC API 读取数据
  17. linux指令_刘世民
  18. 维基解密发布CIA的整个黑客工具集合
  19. channel-wise卷积--学习笔记
  20. intel服务器最新主板芯片组,拒绝阴霾 主板芯片组如何承载时代经典

热门文章

  1. MapReduce论文
  2. centos7安装详细图解_CentOS7编译安装PHP7的详细教程(图文)
  3. OpenCV编译安装
  4. 富文本编辑器 java_HtmlBox富文本编辑器的使用
  5. php怎么跳转别的手机浏览器,JavaScript_JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式),随着移动互联网的不断普及, - phpStudy...
  6. 限定概率抽奖_LOL:欧皇一次抽奖得16个永久皮肤 把老马亏得坐公交啦
  7. #内存不够,swap来凑# Linux上创建SWAP文件/分区
  8. 静态内部类实现 单例模式
  9. RocketMQ 顺序消费只消费一次 坑
  10. linux shell学习四