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的生命周期

}

});

}

}

时间: 2024-12-31 09:31:13

Android学习笔记--Activity中使用Intent传值示例代码的相关文章

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

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学习笔记(9):使用XML文件和Java代码控制UI界面

Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想.   MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.   我们可以在app\src\main\res\layout目录下定义一个XML文件(R.java

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

本文实例讲述了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 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工程文件分析_Android

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

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

Android开发向activity中的webview传递参数

问题描述 Android开发向activity中的webview传递参数 各位帅气可爱爱卖萌的大神们,好难为情我又要打扰你们,小弟被一问题困扰好久了,实在是辗转反侧,难以入睡,夜不能寐,所以想了好久还是决定请教你们. 问题如下, 工程有2个activity,activity①有1个edittext和1个button activity②有一个webview 我想在activity①里的edittext输入一串网址,然后点击button就可以让activity②显示出来,并让webview打开act