Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity、Service、BroadcastReceiver)。通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求。

在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

  通过Intent请求Activity,必须在AndroidManifest.xml文件中对被请求的Activity新增标签配置,否则会导致错误。
   
  Intent一般包含两个主要信息,action、data。
  • action:表示这个Intent此次操作的动作。
  • data:表示这次动作涉及的数据。

  通过一个例子来展示Activity中使用Intent导向新Activity并传递数据。此程序仅在两个页面之间相互跳转,但是每次跳转会创建新的Activity,所以在startActivity()之后需要调用finish()销毁当前Activity,如果不销毁,多次跳转后,程序的Activity栈中会存放多个Activity,点击设备的返回按钮,会发现会一直向后退。

  主要步骤:

  1. 新建Android项目,增加新布局文件other.xml,新增Activity类otherActivity.class,用于接受Intent并展示other.xml。
  2. 在MainActivity类中,声明一个Intent类,通过Intent的构造函数指明源和目标。
  3. 获得Intent后,使用Intent.putExtra()方法对其传入数据。
  4. 调用Activity.startActivity启动这个Intent。
  5. 在otherActivity类中,使用Activity.getIntent()获得当前Activity的Intent。
  6. 获得Intent后,使用Intent.getXxxExtra()方法获得其中保存的数据。
  7. 在AndroidManifest.xml配置otherActivity节点。

示例代码

步骤2--3:

 public class MainActivity extends Activity {
private TextView textView;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView=(TextView)findViewById(R.id.textView1);
btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent构造函数:Intent来源;Intent目的。
Intent intent =new Intent(MainActivity.this,otherActivity.class);
intent.putExtra("data", "当前是页面2,信息来自页面1");
startActivity(intent);//启动Activity
18          finish();
}
});
}
}

步骤4--5:

 public class otherActivity extends Activity {
private Button btn;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other); textView=(TextView)findViewById(R.id.textView2);
btn=(Button)findViewById(R.id.button2); //通过Activity.getIntent()获取当前页面接收到的Intent。
Intent intent =getIntent();
//getXxxExtra方法获取Intent传递过来的数据
String msg=intent.getStringExtra("data");
textView.setText(msg); btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(otherActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
});
}
}

步骤7:

     <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.bgxt.IntentForAc.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".otherActivity"/>
</application>

从Activity中返回数据

  上面例子中只是介绍了Activity通过Intent传递数据,然而在实际应用中,不仅仅需要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递数据类似,但是还是有部分区别。

  主要区别如下:

  1. 传递数据需要使用Activity.startActivityForResult()方法启动Activity,需要传递请求码,而不是Activity.startActivity()。
  2. 返回数据的时候,调用Activity.setResult()方法设置返回Intent以及返回码。
  3. 需要重写源Activity的onActivityResult()方法以便于接受返回的Intent,在onActivityResult()中会判断请求码和响应码。

  通过一个例子说明从Activity返回数据。此程序有两个Activity,在MainActivity中输入加法运算的计算数,跳转到otherActivity中输入计算结果,并在点击返回后,把计算结果输出到MainActivity中。

示例代码

MainActivity:

 public class MainActivity extends Activity {

     private EditText one,two,result;
private Button btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); one=(EditText)findViewById(R.id.one);
two=(EditText)findViewById(R.id.two);
result=(EditText)findViewById(R.id.result);
btn=(Button)findViewById(R.id.btnGo);
btn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
int ione=Integer.parseInt(one.getText().toString());
int itwo=Integer.parseInt(two.getText().toString()); Intent intent=new Intent(MainActivity.this, otherActivity.class);
intent.putExtra("one", ione);
intent.putExtra("two", itwo); //启动需要监听返回值的Activity,并设置请求码:requestCode
startActivityForResult(intent, 1);
}
}); } @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//当otherActivity中返回数据的时候,会响应此方法
//requestCode和resultCode必须与请求startActivityForResult()和返回setResult()的时候传入的值一致。
if(requestCode==1&&resultCode==2)
{
int three=data.getIntExtra("three", 0);
result.setText(String.valueOf(three));
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

otherActivity:

 public class otherActivity extends Activity {
TextView tvShow;
EditText etResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other); tvShow=(TextView)findViewById(R.id.tvShow);
etResult=(EditText)findViewById(R.id.etResult); Intent intent=getIntent();
int a=intent.getIntExtra("one", 0);
int b=intent.getIntExtra("two", 0);
tvShow.setText(a+" + "+b+" = "+" ? "); Button btnResult=(Button)findViewById(R.id.btnReturn);
btnResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//新声明一个Intent用于存放放回的数据
Intent i=new Intent();
int result=Integer.parseInt(etResult.getText().toString());
i.putExtra("three", result);
setResult(2, i);//设置resultCode,onActivityResult()中能获取到
finish();//使用完成后结束当前Activity的生命周期
}
});
}
}

Android--Activity中使用Intent传值的更多相关文章

  1. Android——Activity中的六个主要函数

    Android Activity中的六个主要函数 Android中一个Activity一般都需要实现六个函数: onCreate(), onStart(), onResume(),onPause(), ...

  2. Android 开发中使用Intent传递数据的方法

    Activity之间通过Intent传递值,支持基本数据类型和String对象及 它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.shor ...

  3. Android Fragment中使用Intent组件拍照

    要在activity里面去接受,然后传递给fragment对象,fragment有很多回调调用不到 你的设备有摄像头吗? 为了确保市场上的大多数设备都能运行你的程序,必须在项目中做一些检测,保证使用的 ...

  4. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  5. Android系统中标准Intent的使用

    Android系统用于Activity的标准Intent 1.根据联系人ID显示联系人信息= Intent intent=new Intent(); intent.setAction(Intent.A ...

  6. Android Activity中状态保存机制

    在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...

  7. Activity间中使用Intent传值

    主页面用来输入一个值传入第二个页面显示,关闭第二个页面返回一个值 主页布局: <RelativeLayout xmlns:android="http://schemas.android ...

  8. Activity中使用Intent实现页面跳转与参数的传递(转)

    新建一个FirstAvtivity.java package com.zhuguangwei; import android.app.Activity; import android.content. ...

  9. 调用Android系统设置中的Intent

    开发Android软件时,常常需要打开系统设置或信息界面,来设置相关系统项或查看系统的相关信息,这时我们就可以使用以下语句来实现:(如打开“无线和网络设置”界面) Intent intent = ne ...

随机推荐

  1. zookeeper名字服务

    10.12.67.31 #!/bin/shmkdir -p /data/zk-install/cd /data/zk-install/wget -q -O ons_agent-1.0.5.tar.gz ...

  2. Desktop Central —— Windows 管理工具

    Desktop Central —— Windows 管理工具 定期维护对于保持系统性能平稳必不可少.诸如磁盘检查.磁盘碎片整理程序之类的工具在系统维护中至关重要.因为管理员很难定期手动执行维护. D ...

  3. Python从入门到精通之Sixth!

    补充:enumerate 函数用于遍历序列(元组tuple.列表list.字典dict)中的元素以及它们的下标: >>> for i,j in enumerate(('a','b', ...

  4. var let const的区别

    1. 变量提升: 浏览器在运行代码之前会进行预解析,不论var声明的变量处于当前作用域的第几行,都会提升到作用域的头部.   2. 只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不 ...

  5. 负载均衡器之 Haproxy

    1. 编译安装haproxy 官网: http://www.haproxy.org 1.1 下载haproxy # wget http://www.haproxy.org/download/1.6/s ...

  6. ROS学习笔记(一) : 入门之基本概念

    目录 基本概念 1. Package 2. Repositories 3. Computation Graph 4. Node 5. Master 6. Message 7. Topic 8. Ser ...

  7. linux_批量关闭进程

    以下环境是 fedora24 linux 系统中的情况: 仿真中遇到意外弹出上百个图片,无法一下全部关闭. 可以使用: ps -ef|grep LOCAL=NO|grep -v grep|cut -c ...

  8. eclispe安装tomcate没有srver解决

    eclipse没有server选项解决方法       找到Help->InstallNew Software->"Kepler" repository(http:// ...

  9. ubuntu系统用docker搭建wordpress

    目标:在docker中搭建wordpress 安装顺序: 首先要有一个云服务器---购买或者自己搭建(本人是自己在主机上装了虚拟机,搭建了一个ubuntu14.04,安装链接:https://www. ...

  10. Linux启动流程和脚本服务-6

    授课笔记:----------------------------------- linux系统启动流程:一.初始化阶段:1.grub引导界面2.识别硬件3.初始化驱动 二.加载/etc/rc.d/r ...