Activity的相互调用

转载 2012年03月30日 00:03:24

  多个Activity之间的相互调用:

 

新建一个继承Activity的类,在功能清单AndroidManifest.xml文件中添加进上面Activity配置代码,

  打开新的ActivitystartActivity(new Intent(MainActivity.this, NewActivity.class));

  打开新的Activity,并传递若干个参数给它:

  Intent intent = new Intent(MainActivity.this, NewActivity.class)

  Bundle bundle = new Bundle();//该类用作携带数据

  bundle.putString("name", "传智播客");

  bundle.putInt("age", 4);

  intent.putExtras(bundle);//附带上额外的数据

  startActivity(intent);

  在另一个Activity里面接收参数:

  Bundle bundle = this. getIntent(). getExtras();

  String name = bundle. getString("name");

  int age = bundle. getInt("age");

  Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/ getXxx()方法,如:putString()/ getString()putInt()/ getInt()putXxx()用于往Bundle对象放入数据, getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap类型的变量来存放putXxx()方法放入的值:

 

 请求码的作用:

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面ActivityonActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理。

结果码的作用:

  在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面ActivityonActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,我们就要用到结果码。

  Intent(意图)

  Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。

  Intent可以划分成显式意图和隐式意图。

  显式意图:调用Intent.setComponent()Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。

  隐式意图:没有明确指定组件名的Intent为隐式意图。

  对于隐式意图,Android是怎样寻找到这个最合适的组件呢?记的前面我们在定义活动时,指定了一个intent-filterIntent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。

  动作测试(Action test)

  一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:

  • 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。

  • 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试

  类别测试(Category test)

  对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。

  原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给 startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"("android.intent.action.MAIN" "android.intent.category.LAUNCHER"设置的过滤器是例外)

数据测试(Data test)

  当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该schemeURIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的 URIs都可以和这个过滤器相匹配,而不管它们的路径;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的 URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。

  数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:

  a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。

  b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:tel:这样的URIs上:它们并不引用实际数据。

  c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。

  d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:file: 数据如果它的过滤器仅列举了一个数据类型。


不同app之间activity的启动调用传值

不同应用之间的activity相互切换传值
  • heiyu1993
  • heiyu1993
  • 2017年05月18日 11:00
  • 503

3. 调用另一个Activity,并两个Activity之间相互传递数据

一,在一个Activity中调用另一个Activity 利用 android.content.Intent 对象实现从一个Activity跳转到另一个Activity 例如:从FirstActiv...
  • u014284565
  • u014284565
  • 2014年07月24日 16:24
  • 662

Android开发之Activity之间的相互调用

多个Activity之间的相互调用: 新建一个类继承Activity类,在功能清单AndroidManifest.xml文件中添加进上面Activity的配置代码, 打开新的Activity:st...
  • super_scan
  • super_scan
  • 2014年08月13日 16:54
  • 2880

Activity之间的相互调用

Activity1Java代码  //在按键按下后,调用第二个实体,第二个实体处理完数据后再传给第一个实体  btn3.setOnClickListener(new Button.OnClickLis...
  • dyllove98
  • dyllove98
  • 2013年02月05日 11:49
  • 1212

多Activity之间相互调用方法总结

本文对多个Activity之间的相互调用做个z
  • Trent1985
  • Trent1985
  • 2014年04月09日 15:13
  • 3186

Fregment,Activity 参数传递,相互调用

Activity --- >>>  Fregment            1: Activity中:                 AAFragmnet mFragmnet = new...
  • loveanao
  • loveanao
  • 2014年02月28日 15:31
  • 592

android一个应用的activity调用另一个应用的activity

学习了两个应用之间的activity的调用,和两个应用程序之间的方法调用(运用AIDL实现) 两个应用如下:from应用,to应用(from的activity调用to应用的activity) 实现...
  • mockingbirds
  • mockingbirds
  • 2015年04月02日 22:20
  • 2788

Android activity 与 js 相互调用

现阶段,HTML5+Native开发模式越来越盛行,那么我们就有必要学习一下Android中通过WebView和HTML5进行相互通信。实现的效果图: 主界面是WebView加载html页面的。 ...
  • xingxtao
  • xingxtao
  • 2017年03月04日 20:38
  • 209

c++ 类之间的相互调用问题

这个问题在以前看别人代码的时候看到过类之间的相互调用,但是一直想不通在语法上怎么不会出错。自己试着写一个程序测试了一下。 这里建立两个类。一个是动物,一个是鱼。 1.动物类中有一个成员函数prt(...
  • liunian17
  • liunian17
  • 2012年03月04日 21:05
  • 6858

C++随笔——成员函数的相互调用问题:

C++随笔——成员函数的相互调用问题:
  • u013555238
  • u013555238
  • 2017年10月03日 23:08
  • 77
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity的相互调用
举报原因:
原因补充:

(最多只允许输入30个字)