- 浏览: 330514 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
jnssvh:
楼主,还发代码吗?jnssvh@aliyun.com
SurfaceView简单例子 -
hou_anne:
讲解的非常详细
Android TabActivity实现多页显示效果 -
小鱼小鹰:
现在还能吗。。。296252344@qq.com
自定义控件(SurfaceView与view结合) -
flyar:
你好!我按照你的代码实现多点广播,但是在一台机子休眠,另一台手 ...
UDP广播与多播简单实现 -
herber2010:
图有错误~~
java实现快速排序
Activity之间的相互调用与传递参数
作者:LEGEND QQ:158067568
Activity之间是如何调用的
在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的。
所谓Intent,它是Android中非常重要的内置组件,他可以理解为“我要干一件什么事情”。在Android中有3大组件:Activity,Service、Broadcast,他们之间的通信都是通过Intent来完成的,所以Intent其实就是告诉他们之间的每一个人,要干什么事情。
创建自己的Activity
高焕堂先生的Android讲义中有如下一段内容:
Android的4种嫡系组件(即Activity、Service、IntentReceiver和ContentProvider)之间如何互相沟通呢?这4种嫡系组件都是由Android启动的,并不是组件之间透过直接呼叫而启动的。
这段文字总结的十分精辟,它告诉了读者(以Activity为例)Activity是Android自启动的,这样的话,编程人员必须要明确告诉Android“我的应用程序里面有哪些是你要给我启动的”,而如何告诉Android这些信息呢,Android为我们提供了一个AndroidManifest.xml文件。在这个文件中,就可以告诉Android这些内容。这也是为什么我们在建立了自己的Activity、ContentProvider等之后,必须要在配置文件中进行配置的原因。
以下代码是在自己定义的一个名为SecondActivity的Activity,其配置代码如下:
<activity android:name=".SecondActivity"
android:label="secondActivity">
</activity>
在android:name一项中中的“.”代表在当前配置文件的默认包名之下。
Activity之间的切换
从一个Activity调用另一个Activity,十分简单,只需要创建一个Intent,并且告诉Intent我从哪来,要到哪去,然后执行这个Intent,就可以了。示例代码如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class);
startActivity(i);
当然,这样只能够做到Activity之间的切换,如果想在切换的同时,由旧的Activity向新的Activity传递一些参数,那么就要在startActivity()方法之前,为Intent添加参数,通过putExtra(string,xxx)这组方法,就可实现。
putExtra(string,xxx)方法类似于map,键都是String型,值有不公类型,该方法被重载,具体可参考API,示例代码如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class); i.putExtra("uName", "legend"); i.putExtra("uAge", (short)18); startActivity (i);
获取Intent传递的值
旧的Activity将值传递给了新的Activity,那么在新的Activity中,要通过getIntent()方法,方可接收传递过来的Intent。得到Intent后通过getxxxExtra()方法,可以取得不同类型的值。如下所示:
Intent i = getIntent();
String uName = i.getStringExtra("uName"); short uAge = i.getShortExtra("uAge", (short) 0);
旧Activity得到新Activity结束后传递的Intent
在开发中,有这种情况,比如说我们的一个Activity要调用一个新的Activity,让后用户对新的Activity操作完成后,关闭新的Activity,这时需要将新的Activity中的一些值传递给旧的Activity。这就中情况不用自己处理,Android已经为我们编写了一个onActivityResult(int requestCode, int resultCode, Intent data)方法,专门处理这种情况。
首先,在旧的Acitvity中的启动Intent方法不能再使用之前的startActivity,而要给用startActivityForResult(i, REQUESTCODE1 );方法,该方法第一个参数为要传递的intent,第二个参数为请求码,该请求码其实就是一个整型变量,用于指明是那个方法、或者说是那个控件启动了该intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中,编程使用。读者这里可以不用深究,看到例子后,便会明白。该处代码如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class);
i.putExtra("uName", "legend"); i.putExtra("uAge", (short)18); startActivityForResult(i, REQUESTCODE1 );
其次,在新的Activity中要接受刚刚传递的Intent,接受方法如上所述,这里不再赘述。在新的Acitvity处理完成后,需要同过setResult(Intent i)方法来设置新的Activity结束后需要传递会旧的Activity的Intent。之后调用新的Activity的finish()方法,结束新的Acitvity就可以了。代码如下:
Intent resultIntent = new Intent(); resultIntent.putExtra("uName", "legend2"); resultIntent.putExtra("uAge", (short)22); setResult(RESULTCODE1, resultIntent); SecondActivity.this.finish();
最后,在旧的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,该方法的三个参数,这里就不在赘述了,相信读者一看即明白,这里给出代码如下:
if(requestCode == REQUESTCODE1){ System.out.println("REQUESTCODE equal"); if(resultCode == SecondActivity.RESULTCODE1){ System.out.println("RESULTCODE equal"); String uName = data.getStringExtra("uName"); short uAge = data.getShortExtra("uAge", (short)0); tv.setText("uName:"+uName+" uAge:"+uAge); } }
参考程序
ActivityTest
补充:
在Intent中,可以携带Object类型的信息,读者查阅API后,可能会放先,putExtra()方法中,并没有实现object的,但是重载了如下的方法:putExtra(String name, Serializable value),只要将对象实现了Serializable接口,就可以添加进Intent了。
对象序列化及反序列化
一个对象产生后,实际上是在内存中开辟了一个存储空间,方便存储信息。
对象的序列化,就是一个对象变成二进制数据流的一种方法,通过对象的序列化可以方便的实现对象的传输与存储。
如果一个类的对象想要被序列化,必须实现Serializable接口,但是该接口中无方法,它属于一个标示接口,表示具备了某种能力。
序列化和反序列化,可以理解为:
序列化:程序àObjectOutputStreamà序列化对象
反序列化:序列化对象àObjectInputStreamà程序
在序列化的时候,可以通过serialVersionUID来标识序列化版本。
值得注意的是,序列化存储的只是对象的成员变量。
ObjectInputStream中的readObject()方法可读取对象。
ObjectOutputStream中的writeObject()方法可写入对象。
transient关键字
在序列化时,可以指定那个成员变量不被序列化,只要在成员变量之前添加transient关键字即可。
参考代码
这部分内容可参考代码:DserPerson,SerPerson,Person。
在Android中实现,可参考代码ActivityTest2
发表评论
-
eclipse 快捷键 for macbook (自用备份)
2011-11-06 19:31 1799产看方法被谁调用: cmd + shift + g -
android去除状态栏和下面视图之前的黑线
2011-08-30 11:13 3556<style name=" ... -
sqlite3 常用命令 for android
2011-08-16 10:59 14261)创建数据库文件: ... -
解决Window系统adb shell后中文显示乱码
2011-08-16 10:52 6148Android中使用的是UTF-8字符,而CMD默认字符集 ... -
(转)Eclipse xml formatter setting for android
2011-08-16 10:03 1752Android里使用很多xml 定义layout,我们 ... -
Android TabActivity实现多页显示效果
2011-03-05 01:28 29576TabActivity实现多页显示 ... -
ListView进阶系列之一 内容顺序淡淡显示
2011-03-04 10:06 5995ListView进阶系列之一 内容顺序淡淡显示 listVi ... -
Android Animation 高手必读 之一 Tweened Animations 代码实现
2011-02-27 23:55 9357半小时搞定Android Animation 之一 作者:L ... -
android布局文件中的include
2011-02-27 00:46 9014居然没有发现,在xml文件中可以使用include,我晕 一 ... -
【收集】Android 面试题
2011-02-25 23:42 9916这个是我自己整理的一些面试题,都是在网上找的,非原创。面试前可 ... -
handler异步控制Runnable
2011-02-20 11:03 92111 关于改变Activity中TextView的方法 ... -
Android消息机制入门一
2011-02-19 19:54 2122Android消息机制入门 ... -
自定义控件(SurfaceView与view结合)
2011-02-14 15:59 16226自定义控件(SurfaceView与view结合) 作 ... -
SurfaceView简单例子
2011-02-13 23:53 8399SurfaceView简单例子 作者:Legend ... -
SurfaceView概述
2011-02-13 21:20 16430SurfaceView概述 作者 ... -
Surface概述
2011-02-13 16:18 3304Surface概述 作者:L ... -
SharedPreferenced
2010-12-25 21:49 2009SharedPreferenced ... -
Android中进行单元测试
2010-12-23 13:35 1660Android中进行单元测试 作者:LEGEND ... -
Android 与 MVC
2010-12-23 12:30 3788Android & MVC 作者:LEGEND ... -
android中文件IO
2010-12-23 01:31 3280Android中文件的读写 ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip