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

主要步骤:

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:

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 }

步骤4--5:

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 }

步骤7:

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中。

示例代码

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 }

otherActivity:

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传值相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> 一 Android系统用于Activity的标准Intent 1 根据联系人ID显示联系人信息 Intent intent = ...

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

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

  3. java推送数据给安卓,java – 如何从Firebase推送通知中获取数据并将其显示在Android Activity中?...

    对不起这个noob问题,我是 android开发的新手.我目前正在开发一个项目,需要向安装了我的应用程序的 Android设备发送推送通知.我已经按照firebase的快速入门教程完成了这项工作,并在 ...

  4. Android Activity中状态保存机制

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

  5. Android Activity中实现Fragment切换功能效果

    一个最简单的Activity中实现Fragment切换功能效果: 一.效果图: 二.快速实现: 一个Activity中添加多个Fragment进行切换实现相应的功能需求逻辑,比如在activity中有 ...

  6. android学习笔记---1.为应用添加新的Activity,中使用Intent(意图),结果码,请求码,得到新打开Activity 关闭后返回的数据,Bundle类的作用

    1.为应用添加新的Activity 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity {     ...

  7. Android Activity中加入View后进行后台截屏截图

    后台截图步骤: 1.通过Activity的findViewById方法,传入系统固定资源Android.R.id.content获取Windows最顶层的ViewGroup. 2.获该ViewGrou ...

  8. Android Activity中重写onCreateOptionsMenu不显示菜单按钮

    前段时间做项目需要显示选项 菜单,但是在4.0平板以及三星Note上面始终不显示Menu按钮,搞了大半天,终于解决! @Overridepublic boolean onCreateOptionsMe ...

  9. 【九】Android Activity一

    今天抽了一天的时间来探讨Activity的学习内容(这里的话会有入门篇,中级篇,以及高级篇),学了Java2EE的孩子们应该知道里面有个servlet,其实activity也是类似的一个东西.废话不多 ...

  10. Android Activity的探讨——入门

    今天抽了一天的时间来探讨Activity的学习内容(这里的话会有入门篇,中级篇,以及高级篇),学了Java2EE的孩子们应该知道里面有个servlet,其实activity也是类似的一个东西.废话不多 ...

最新文章

  1. Python3 try-except、raise和assert解析
  2. MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
  3. 密码强度测试工具包【Java】_测试用例
  4. Spring Boot 核心知识点总结,值得收藏!
  5. python 生成payload_利用Python进行Payload分离免杀
  6. 用TortoiseGit时的实用git命令
  7. AngularJS-Hello World
  8. Windows 安装 Redis
  9. PHP Socket编程(转)
  10. Redis学习总结(6)——Redis 高级特性与案例学习
  11. tomcat 访问本地C,D盘等文件配置
  12. IBatisNet之获取和操作SQL语句
  13. 应用 Remoting
  14. 深度学习中的激活函数
  15. matlab中syms空间问题
  16. 云原生时代,如何保证容器镜像安全?
  17. 【华为机试真题 Python实现】一个正整数到 Excel 编号之间的转换
  18. 学习半年Java的初次经验分享
  19. 炒菜机器人放食材的顺序_机器人能否消灭厨师这个职业?
  20. 艾司博讯:拼多多网店账号出现异常该怎么解决?

热门文章

  1. 【数据库原理实验(openGauss)】完整性控制
  2. Stm32 CubeMx安装和配置Cube.ai教程
  3. 微信小程序多位验证码/密码输入框
  4. 「美团 CodeM 复赛」城市网络
  5. python多线程与多进程
  6. 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。...
  7. JavaScript调Java
  8. 如何使用JMeter来实现更大批量的并发的解决方案(即如何设置controller和Agent)
  9. Python 函数(类)的装饰器与闭包
  10. 02-橄榄球 VS 软件