Android Activity之间相互调用与传递参数的原理与用法分析

本文实例讲述了Android Activity之间的相互调用与传递参数。分享给大家供大家参考,具体如下:

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()方法可写入对象。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android视图View技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-10-01 07:53:33

Android Activity之间相互调用与传递参数的原理与用法分析的相关文章

Android Activity之间相互调用与传递参数的原理与用法分析_Android

本文实例讲述了Android Activity之间的相互调用与传递参数.分享给大家供大家参考,具体如下: Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的. 所谓Intent,它是Android中非常重要的内置组件,他可以理解为"我要干一件什么事情".在Android中有3大组件:Activity,Service.Broadcast,他们之间

关于Android Activity之间传递数据的6种方式

使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra("data",str); //激活意图 startActivity(intent); 第二个Activity中 // 获取意图对象 Intent intent = getIntent(); //获取传递的值 String str = intent.ge

Android和JavaScript相互调用的方法_Android

本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面.缺点是会受到网络信号的影响,从而导致访问速度慢. 1.用WebView来显示HTML代码 2.允许WebView执行JavaScript 复制代码 代码如下: webView.getSettings().setJavaScriptEnabled(true); 3.

Android和JavaScript相互调用的方法

本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面.缺点是会受到网络信号的影响,从而导致访问速度慢. 1.用WebView来显示HTML代码 2.允许WebView执行JavaScript 复制代码 代码如下:webView.getSettings().setJavaScriptEnabled(true); 3.获

android javascript:android与javascript相互调用

               下面这一节来介绍android和javascript是怎么相互调用的,这样我们的UI界面设计起来就简单多了,而且UI设计起来也可以跨平台.现在有好多web app前台框架了,比如sencha和jquery mobile等.相信未来随着web app的发展我们同样可以使用html设计出和本地应用一样漂亮的界面.这些虽然很美好,但是现在还有很多弊端,比如比本地框架调用慢的多,因为手机是受限的设备,所以处理起来和反应都是比较慢的,期望未来会有较大的发展.哈哈!      

C与C++之间相互调用的实例方法

 这篇文章主要介绍了C与C++之间相互调用的实例方法,大家参考使用吧 1.导出C函数以用于C或C++的项目   如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则用C链接声明这些函数.如果使用此技术并为DLL提供头文件,则这些函数可以原封不动地由C和C++模块使用.   以下代码演示可由 C 和 C++ 客户端应用程序使用的头文件:     代码如下: // MyCFuncs.h #i

详解Android Activity之间切换传递数据的方法_Android

前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是intent的基础用法. 先上个图(界面依旧没优化,难看就难看吧): 起始activity,打开图片选择窗口,随便选择一张图片 下面是跳转到裁剪界面 按下crop按钮,退出activity,回到原来界面,并显示裁剪后的图 流程就是这样,也算模拟了系统裁剪功能的整体过程.下面就是实现功能的关键代码和说明了.

Android Activity之间传递图片(Bitmap)的方法_Android

在Android开发中:Activity之间传递参数是常见的事:如果我们要在Activity之间传递图片:1.MainActivity中包括一个ImageView:当我们点击ImageView时:把图片传递给另外一个Activity MainActivity的主要代码: 复制代码 代码如下: Intent intent=new Intent(MainActivity.this,TranActivity.class);            intent.putExtra("bitmap"

Android Activity之间传递图片(Bitmap)的方法

在Android开发中:Activity之间传递参数是常见的事:如果我们要在Activity之间传递图片:1.MainActivity中包括一个ImageView:当我们点击ImageView时:把图片传递给另外一个Activity MainActivity的主要代码:复制代码 代码如下:Intent intent=new Intent(MainActivity.this,TranActivity.class);            intent.putExtra("bitmap",