Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。
 
  Intent是Android一个很重要的类。Intent直译是“意图”,什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图。Intent类在Android系统中的作用很大,在此不详细说了,后面有文章介绍!
 

Activity跳转,无返回结果

   这是最简单的Activity跳转方式。从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activity.this, 下一Activity.class))。
  1. ((Button) findViewById(R.id.Notepadv1)).setOnClickListener( new OnClickListener() {
  2. public void onClick(View v) {
  3. startActivity(new Intent (MyAndroidAppActivity.this, Notepadv1.class) );
  4. }
  5. });
 

Activity跳转,返回数据/结果

  需要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自定义的,用于识别跳转的目标Activity。跳转的目标Activity所要做的就是返回数据/结果,setResult(int resultCode)只返回结果不带数据,或者setResult(int resultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面。
 
MyAndroidAppActivity:
  1. static final int SEND_SMS_REQUEST = 0;
  2. static final int CALL_REQUEST = 1;
  3.  
  4. ((Button) findViewById(R.id.sms)).setOnClickListener( new OnClickListener() {
  5. public void onClick(View v) {
  6. Intent intent = new Intent(MyAndroidAppActivity.this, SendSMSActivity.class);
  7. startActivityForResult(intent, SEND_SMS_REQUEST);
  8. }
  9. });
  10.  
  11. @Override
  12. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  13. if (requestCode == SEND_SMS_REQUEST) {
  14. if (resultCode == RESULT_OK) {
  15. Toast.makeText(this, "Send SMS RESULT_OK", Toast.LENGTH_SHORT).show();
  16. }else if (resultCode == RESULT_CANCELED) {
  17. Bundle bundle = data.getExtras();
  18. String phoneno = bundle.getString("phoneNO");
  19. Toast.makeText(this, "Send SMS RESULT_CANCELED "+phoneno, Toast.LENGTH_SHORT).show();
  20. }
  21. }else if (requestCode == CALL_REQUEST) {
  22. if (resultCode == RESULT_CANCELED) {
  23. Toast.makeText(this, "Call RESULT_CANCELED", Toast.LENGTH_SHORT).show();
  24. }
  25. }
  26. }
 
SendSMSActivity:
  1. ((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() {
  2. public void onClick(View v) {
  3. SendSMSActivity.this.setResult(RESULT_OK);
  4. SendSMSActivity.this.finish();
  5. }
  6. }):
 
** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
 
    RESULT_OK和RESULT_CANCELED是系统空间里面的常量,不需要自定义,直接使用就行。
 
   另外在运行过程中,发现按Back键后,是可以返回RESULT_CANCELED的,看了SDK doc后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回RESULT_CANCELED时并返回数据,那么需要截获Back键的事件处理,把原来返回RESULT_CANCELED的核心逻辑copy到事件处理里面。这里给个例子:
 
  1. ((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() {
  2. public void onClick(View v) {
  3. // 实例化 Bundle,设置需要传递的参数
  4. Bundle bundle = new Bundle();
  5. bundle.putString("phoneNO", "020-123");
  6.  
  7. SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle));
  8. SendSMSActivity.this.finish();
  9. }
  10. });
  11.  
  12. @Override
  13. public boolean onKeyDown(int keyCode, KeyEvent event) {
  14. // 是否触发按键为back键
  15. if (keyCode == KeyEvent.KEYCODE_BACK) {
  16.  
  17. // 实例化 Bundle,设置需要传递的参数
  18. Bundle bundle = new Bundle();
  19. bundle.putString("phoneNO", "020-123");
  20.  
  21. setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle));
  22. this.finish();
  23. return true;
  24. }else {
  25. return super.onKeyDown(keyCode, event);
  26. }
  27. }
    这里要注意的是,在处理Back键事件后return true则表示本事件不再传递给其他函数处理,可理解为由当前函数全权负责处理,所以在return前finish当前Activity,保持原来的行为表现,当然我们可以设置为隐藏当前Activity等其他行为。
 

Activity传送数据

    在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。那么,从原来的Activity A传送数据到新的Activity B, Activity B如何获取传送过来的Intent参数时呢?最近写了这样的一个例子:
 
In Activity A:
  1. // 在某个按钮响应事件里
  2. Intent intent = new Intent(this, TextInputActivity.class);
  3. intent.putExtra("Text", mText);
  4. intent.putExtra("TextColor", mTextColor);
  5. intent.putExtra("TextSize", mTextSize);
  6. intent.putExtra("TextBold", mTextBold);
  7.  
  8. startActivityForResult(intent, REQUEST_TEXT);
In Activity B:
  1. // in onCreate(Bundle savedInstanceState)
  2. Bundle extras = getIntent().getExtras();
  3. mText = extras.getString("Text");
  4. mTextColor = extras.getInt("TextColor");
  5. mTextSize = extras.getFloat("TextSize");
  6. mTextBold = extras.getBoolean("TextBold");

转自:http://android.blog.51cto.com/268543/323982

Activity学习(三)——跳转传值的更多相关文章

  1. 利用onNewIntent避免Activity之间的跳转传值多次实体化

    onNewIntent 需要注意的是: 1.通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统也会创建一个新的Activity实例.为了不让Acti ...

  2. Android开发之Activity的创建跳转及传值

    在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介 ...

  3. Android中实现activity的页面跳转并传值

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  4. MUI框架开发HTML5手机APP(二)--页面跳转传值&底部选项卡切换

      概 述 JRedu 在上一篇博客中,我们学习了如何使用Hbuilder创建一个APP,同时如何使用MUI搭建属于自己的第一款APP,没有学习的同学可以戳链接学习: http://www.cnblo ...

  5. 第35讲 Activity入门和跳转

    第35讲Activity入门和跳转 1.Activity Activity是用户接口程序.在Android当中,Activity提供可视化的用户界面,一个Android应用通常由多个activity组 ...

  6. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  7. UWP 页面跳转传值

    如果涉及到页面跳转,一般用Frame这个控件来管理不同的页面. <Grid Name="RootGrid"> <Frame Name="RootFram ...

  8. Android笔记(二十) Activity中的跳转和值传递

    我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 显式Intent跳 ...

  9. day 82 Vue学习三之vue组件

      Vue学习三之vue组件   本节目录 一 什么是组件 二 v-model双向数据绑定 三 组件基础 四 父子组件传值 五 平行组件传值 六 xxx 七 xxx 八 xxx 一 什么是组件 首先给 ...

  10. Activity组件:(一)通过显式意图和隐式意图来实现Activity间的跳转

    一.通过显式意图来实现Activity间的跳转 显式意图是指在创建Intent对象时就指定接受者组件 /** * 下面是通过显式意图进行跳转,即明确写出要跳转到SecondActivity.class ...

随机推荐

  1. 插值和空间分析(二)_变异函数分析(R语言)

    方法1.散点图 hscat(log(zinc)~, meuse, (:)*) 方法2.变异函数云图 library(gstat) cld <- variogram(log(zinc) ~ , m ...

  2. php取整函数floor(),round(),intval(),ceil()

    ceil -- 进一法取整说明float ceil ( float value )返回不小于 value 的下一个整数,value 如果有小数部分则进一位.ceil() 返回的类型仍然是 float, ...

  3. 013--VS2013 C++ 地图贴图-其它格式图片

    //--------------------------------------------InitInstance() 函数------------------------------------- ...

  4. 003--VS2013 C++ 多边形绘制

    //全局变量HPEN hPen;HBRUSH hBru;POINT poly1[6], poly2[5], poly3[5]; //---------------------------------- ...

  5. My First Django Project - <Django + MySQL + Ajax> (1)

    因为最近工作有些信息需要额外花时间去收集,但是现在有相关的operations每天记录状态,但是没有一个很好的状态收集工具,将状态收集起来,所以很多情况下我们不知道是状态变好了,还是变差.如果使用EX ...

  6. 实例详细说明linux下去除重复行命令uniq

    地址:http://blog.51yip.com/shell/1022.html 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但 ...

  7. C++中的运算符重载注意事项

    1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...

  8. Abstract Class与 Interface 的区别

    表格                                                                                               Abs ...

  9. 四则运算2--设计思路--软件工程-c++

    1.题目避免重复. 2.可定制(数量 打印方式). 3.可以控制下列参数:是否有乘除法.是否有括号.数值范围.加减有无负数.除法有无余数.是否支持分数(真分数,假分数...).是否支持小数(精确到多少 ...

  10. android 高德地图出现【定位失败key鉴权失败】

    如题:android 高德地图出现[定位失败key鉴权失败] 原因:使用的是debug模式下的SHA1,发布的版本正确获取SHA1的方式见: 方法二使用 keytool(jdk自带工具),按照如下步骤 ...