Android学习笔记--Activity中使用Intent传值示例代码

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,点击设备的返回按钮,会发现会一直向后退。

主要步骤:
新建Android项目,增加新布局文件other.xml,新增Activity类otherActivity.class,用于接受Intent并展示other.xml。
在MainActivity类中,声明一个Intent类,通过Intent的构造函数指明源和目标。
获得Intent后,使用Intent.putExtra()方法对其传入数据。
调用Activity.startActivity启动这个Intent。
在otherActivity类中,使用Activity.getIntent()获得当前Activity的Intent。
获得Intent后,使用Intent.getXxxExtra()方法获得其中保存的数据。
在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
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中返回数据,虽然返回数据和传递数据类似,但是还是有部分区别。
主要区别如下:
传递数据需要使用Activity.startActivityForResult()方法启动Activity,需要传递请求码,而不是Activity.startActivity()。
返回数据的时候,调用Activity.setResult()方法设置返回Intent以及返回码。
需要重写源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的生命周期
}
});
}
}

(0)

相关推荐

  • Android 中两个Activity 之间的传值问题

    Android 中两个Activity 之间的传值问题 在Android项目中,有时需要一些全局的静态变量来保存一些数据,这样在关闭赋值界面后,其他的页面还可以调用这些数据. 但是我们知道,在Java中全局静态变量(java中没有全局变量这一个概念,但是java提供了public static关键字来实现一些类似于全局变量的关键字)都是在程序加载时就放人到内存中,它是存储在方法区里的.如果程序不结束,它将一直存在.这是会影响到系统的性能的.那么在android中可不可以不通过这种方式来传递值呢?

  • Android 多个Activity之间的传值

    下面是主Activity的代码: 开发:Activity之间的传值 - 51CTO.COM 复制代码 代码如下: package com.chaoyang.activity; import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.text.style.BulletSpan;import android.view.View;import android.wi

  • Android学习笔记--使用剪切板在Activity中传值示例代码

    在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据,在Android系统中也存在此技术. 使用剪切板会用到,ClipboardManager对象,这个对用剪切板会用到,ClipboardManager象用来操作剪切板,但是没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CL

  • Android Activity的跳转与传值详解

    Android Activity的跳转与传值详解 Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据. Intent是Android一个很重要的类.Intent直译是"意图",什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图.Intent类在Android系统中的作用很大,在此不详细说了,后面有文章介绍! Activity跳转,无返回结果 这是最简单的Activity跳转方式.从一个Activity启动

  • Android开发中Activity创建跳转及传值的方法

    在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider). 今天所介绍的就是Android开发中的四大组件之一:Activity,其他那三大组件以后再进行介绍.说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制器).在应用中能看到的东西都是放在活动中的.活动是安卓开发比较重要的东

  • Android学习笔记--Activity中使用Intent传值示例代码

    Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity.Service.BroadcastReceiver).通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,

  • Android开发从相册中选取照片的示例代码

    最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽. 下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪.先上效果图 (1)直接选择相册后返回 第一步就是主要跳转的相册 //在这里跳转到手机系统相册里面 Intent intent = new Intent( Intent.ACTION_PICK, android.provider.M

  • Android Activity中使用Intent实现页面跳转与参数传递的方法

    本文实例讲述了Android Activity中使用Intent实现页面跳转与参数传递的方法.分享给大家供大家参考,具体如下: 新建一个FirstAvtivity.java package com.zhuguangwei; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.O

  • Android学习笔记(二)App工程文件分析

    App工程文件分析 关于如何创建一个最简单的Android App请参照链接: < Android学习笔记(一)环境安装及第一个hello world > http://www.jb51.net/article/52593.htm 创建完的工程文件如下图所示,本文对一些主要的文件进行分析. src文件分析 App源文件如图: 打开源文件 MainActivity.java 可看到如下代码: 源码主要功能如下: App源文件目录 package com.example.firstapp; 导入A

  • Android学习笔记之应用单元测试实例分析

    本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

  • Android学习笔记之蓝牙功能

    本文实例为大家分享了Android学习笔记之蓝牙功能的具体代码,供大家参考,具体内容如下 蓝牙:短距离无线通讯技术标准.蓝牙协议分为4层,即核心协议层.电缆替代协议层.电话控制协议层和其他协议层.其中核心协议层包括基带.链路管理.逻辑链路控制和适应协议四部分.链路管理(LMP)负责蓝牙组件间的建立.逻辑链路控制与适应协议(L2CAP)位于基带协议层上,属于数据链路层,是一个高层传输和应用层协议屏蔽基带协议的适配协议. 1).第一种打开蓝牙的方式: Intent enableIntent = ne

  • Android实现从activity中停止Service的方法

    本文实例讲述了Android实现从activity中停止Service的方法.分享给大家供大家参考,具体如下: 1.在AndroidManifest.xml注册Service <service android:name=".service.SensorService" > <intent-filter> <action android:name="ITOP.MOBILE.SIMPLE.SERVICE.SENSORSERVICE"/>

  • Android学习笔记45之gson解析json

    JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

  • Android编程之Activity中onDestroy()调用分析

    本文分析了Android编程之Activity中onDestroy()调用方法.分享给大家供大家参考,具体如下: 刚刚一个BUG让我发现,如果 activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener 接口,然后 findViewById().setOnClickListenr(this) 如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,

  • Android实现在一个activity中添加多个listview的方法

    本文实例讲述了Android实现在一个activity中添加多个listview的方法.分享给大家供大家参考,具体如下: listview的id一般是这样的android:id="@id/android:list".请注意,这时的Activity是ListActivity,在这样的Activity中到目前为止,我没有发现添加多个activity的方法.要添加多个listview,所用的Activity要是一般的Activity,listview的id也要自己定义,改成android:i

随机推荐