Android--Activity中使用Intent传值
Android--Activity中使用Intent传值
Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity、Service、BroadcastReceiver)。通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求。
在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
通过Intent请求Activity,必须在AndroidManifest.xml文件中对被请求的Activity新增标签配置,否则会导致错误。
action:表示这个Intent此次操作的动作。
data:表示这次动作涉及的数据。
通过一个例子来展示Activity中使用Intent导向新Activity并传递数据。此程序仅在两个页面之间相互跳转,但是每次跳转会创建新的Activity,所以在startActivity()之后需要调用finish()销毁当前Activity,如果不销毁,多次跳转后,程序的Activity栈中会存放多个Activity,点击设备的返回按钮,会发现会一直向后退。
主要步骤:
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节点。
示例代码
1 public class MainActivity extends Activity {
2 private TextView textView;
3 private Button btn;
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.activity_main);
8
9 textView=(TextView)findViewById(R.id.textView1);
10 btn=(Button)findViewById(R.id.button1);
11 btn.setOnClickListener(new View.OnClickListener() {
12 @Override
13 public void onClick(View v) {
14 // Intent构造函数:Intent来源;Intent目的。
15 Intent intent =new Intent(MainActivity.this,otherActivity.class);
16 intent.putExtra("data", "当前是页面2,信息来自页面1");
17 startActivity(intent);//启动Activity
18 finish();
18 }
19 });
20 }
21 }
1 public class otherActivity extends Activity {
2 private Button btn;
3 private TextView textView;
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 // TODO Auto-generated method stub
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.other);
9
10 textView=(TextView)findViewById(R.id.textView2);
11 btn=(Button)findViewById(R.id.button2);
12
13 //通过Activity.getIntent()获取当前页面接收到的Intent。
14 Intent intent =getIntent();
15 //getXxxExtra方法获取Intent传递过来的数据
16 String msg=intent.getStringExtra("data");
17 textView.setText(msg);
18
19 btn.setOnClickListener(new View.OnClickListener() {
20 @Override
21 public void onClick(View v) {
22 Intent intent=new Intent(otherActivity.this,MainActivity.class);
23 startActivity(intent);
24 finish();
25 }
26 });
27 }
28 }
1 <application
2 android:allowBackup="true"
3 android:icon="@drawable/ic_launcher"
4 android:label="@string/app_name"
5 android:theme="@style/AppTheme" >
6 <activity
7 android:name="cn.bgxt.IntentForAc.MainActivity"
8 android:label="@string/app_name" >
9 <intent-filter>
10 <action android:name="android.intent.action.MAIN" />
11 <category android:name="android.intent.category.LAUNCHER" />
12 </intent-filter>
13 </activity>
14 <activity android:name=".otherActivity"/>
15 </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中。
示例代码
1 public class MainActivity extends Activity {
2
3 private EditText one,two,result;
4 private Button btn;
5
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_main);
10
11 one=(EditText)findViewById(R.id.one);
12 two=(EditText)findViewById(R.id.two);
13 result=(EditText)findViewById(R.id.result);
14 btn=(Button)findViewById(R.id.btnGo);
15 btn.setOnClickListener(new View.OnClickListener() {
16
17 @Override
18 public void onClick(View v) {
19 // TODO Auto-generated method stub
20 int ione=Integer.parseInt(one.getText().toString());
21 int itwo=Integer.parseInt(two.getText().toString());
22
23 Intent intent=new Intent(MainActivity.this, otherActivity.class);
24 intent.putExtra("one", ione);
25 intent.putExtra("two", itwo);
26
27 //启动需要监听返回值的Activity,并设置请求码:requestCode
28 startActivityForResult(intent, 1);
29 }
30 });
31
32 }
33
34 @Override
35 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
36 super.onActivityResult(requestCode, resultCode, data);
37 //当otherActivity中返回数据的时候,会响应此方法
38 //requestCode和resultCode必须与请求startActivityForResult()和返回setResult()的时候传入的值一致。
39 if(requestCode==1&&resultCode==2)
40 {
41 int three=data.getIntExtra("three", 0);
42 result.setText(String.valueOf(three));
43 }
44 }
45
46 @Override
47 public boolean onCreateOptionsMenu(Menu menu) {
48 // Inflate the menu; this adds items to the action bar if it is present.
49 getMenuInflater().inflate(R.menu.main, menu);
50 return true;
51 }
52 }
1 public class otherActivity extends Activity {
2 TextView tvShow;
3 EditText etResult;
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.other);
8
9 tvShow=(TextView)findViewById(R.id.tvShow);
10 etResult=(EditText)findViewById(R.id.etResult);
11
12 Intent intent=getIntent();
13 int a=intent.getIntExtra("one", 0);
14 int b=intent.getIntExtra("two", 0);
15 tvShow.setText(a+" + "+b+" = "+" ? ");
16
17 Button btnResult=(Button)findViewById(R.id.btnReturn);
18 btnResult.setOnClickListener(new View.OnClickListener() {
19 @Override
20 public void onClick(View v) {
21 //新声明一个Intent用于存放放回的数据
22 Intent i=new Intent();
23 int result=Integer.parseInt(etResult.getText().toString());
24 i.putExtra("three", result);
25 setResult(2, i);//设置resultCode,onActivityResult()中能获取到
26 finish();//使用完成后结束当前Activity的生命周期
27 }
28 });
29 }
30 }
转载于:https://www.cnblogs.com/leehyuan/p/3389534.html
Android--Activity中使用Intent传值相关推荐
- Android系统中标准Intent的使用
2019独角兽企业重金招聘Python工程师标准>>> 一 Android系统用于Activity的标准Intent 1 根据联系人ID显示联系人信息 Intent intent = ...
- Android 开发中使用Intent传递数据的方法
Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...
- java推送数据给安卓,java – 如何从Firebase推送通知中获取数据并将其显示在Android Activity中?...
对不起这个noob问题,我是 android开发的新手.我目前正在开发一个项目,需要向安装了我的应用程序的 Android设备发送推送通知.我已经按照firebase的快速入门教程完成了这项工作,并在 ...
- Android Activity中状态保存机制
在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...
- Android Activity中实现Fragment切换功能效果
一个最简单的Activity中实现Fragment切换功能效果: 一.效果图: 二.快速实现: 一个Activity中添加多个Fragment进行切换实现相应的功能需求逻辑,比如在activity中有 ...
- android学习笔记---1.为应用添加新的Activity,中使用Intent(意图),结果码,请求码,得到新打开Activity 关闭后返回的数据,Bundle类的作用
1.为应用添加新的Activity 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity { ...
- Android Activity中加入View后进行后台截屏截图
后台截图步骤: 1.通过Activity的findViewById方法,传入系统固定资源Android.R.id.content获取Windows最顶层的ViewGroup. 2.获该ViewGrou ...
- Android Activity中重写onCreateOptionsMenu不显示菜单按钮
前段时间做项目需要显示选项 菜单,但是在4.0平板以及三星Note上面始终不显示Menu按钮,搞了大半天,终于解决! @Overridepublic boolean onCreateOptionsMe ...
- 【九】Android Activity一
今天抽了一天的时间来探讨Activity的学习内容(这里的话会有入门篇,中级篇,以及高级篇),学了Java2EE的孩子们应该知道里面有个servlet,其实activity也是类似的一个东西.废话不多 ...
- Android Activity的探讨——入门
今天抽了一天的时间来探讨Activity的学习内容(这里的话会有入门篇,中级篇,以及高级篇),学了Java2EE的孩子们应该知道里面有个servlet,其实activity也是类似的一个东西.废话不多 ...
最新文章
- Python3 try-except、raise和assert解析
- MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
- 密码强度测试工具包【Java】_测试用例
- Spring Boot 核心知识点总结,值得收藏!
- python 生成payload_利用Python进行Payload分离免杀
- 用TortoiseGit时的实用git命令
- AngularJS-Hello World
- Windows 安装 Redis
- PHP Socket编程(转)
- Redis学习总结(6)——Redis 高级特性与案例学习
- tomcat 访问本地C,D盘等文件配置
- IBatisNet之获取和操作SQL语句
- 应用 Remoting
- 深度学习中的激活函数
- matlab中syms空间问题
- 云原生时代,如何保证容器镜像安全?
- 【华为机试真题 Python实现】一个正整数到 Excel 编号之间的转换
- 学习半年Java的初次经验分享
- 炒菜机器人放食材的顺序_机器人能否消灭厨师这个职业?
- 艾司博讯:拼多多网店账号出现异常该怎么解决?
热门文章
- 【数据库原理实验(openGauss)】完整性控制
- Stm32 CubeMx安装和配置Cube.ai教程
- 微信小程序多位验证码/密码输入框
- 「美团 CodeM 复赛」城市网络
- python多线程与多进程
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。...
- JavaScript调Java
- 如何使用JMeter来实现更大批量的并发的解决方案(即如何设置controller和Agent)
- Python 函数(类)的装饰器与闭包
- 02-橄榄球 VS 软件