1:  package com.example.activity_basic;
   2:   
   3:  import android.os.Bundle;
   4:  import android.app.Activity;
   5:  import android.view.KeyEvent;
   6:  import android.view.Menu;
   7:  import android.view.MotionEvent;
   8:  import android.widget.Toast;
   9:   
  10:  public class MainActivity extends Activity {
  11:      /*onCreate()接口是初始化 Activity 的地方, 在这儿通常可以调用 setContentView()设
  12:      置在资源文件中定义的 UI, 使用 findViewById() 可以获得 UI 中定义的控件.这些在前一篇
  13:      都有介绍。不仅管理着 Android 应用中 View 的显示,还要处理 Android 中用户触发的各种事件。
  14:      这个管理员可还真够忙的啊。*/
  15:      @Override
  16:      protected void onCreate(Bundle savedInstanceState) {
  17:          super.onCreate(savedInstanceState);
  18:          setContentView(R.layout.activity_main);
  19:      }
  20:      
  21:      @Override
  22:      public boolean onKeyDown(int keyCode, KeyEvent event) {
  23:          // TODO Auto-generated method stub
  24:          showInfor("按键按下");
  25:          return super.onKeyDown(keyCode, event);
  26:      }
  27:      
  28:      @Override
  29:      public boolean onKeyUp(int keyCode, KeyEvent event) {
  30:          // TODO Auto-generated method stub
  31:          showInfor("按键松开");
  32:          return super.onKeyUp(keyCode, event);
  33:      }
  34:      
  35:      private void showInfor(String string) {
  36:          // TODO Auto-generated method stub
  37:          Toast.makeText(MainActivity.this, string, 2000).show();    
  38:      }
  39:   
  40:      @Override
  41:      public boolean onTouchEvent(MotionEvent event) {
  42:          // TODO Auto-generated method stub
  43:          float x = event.getX();
  44:          float y = event.getY();
  45:          showInfor("您点击的坐标为:("+x+":"+y+")");
  46:          return super.onTouchEvent(event);
  47:      }
  48:   
  49:      @Override
  50:      public boolean onCreateOptionsMenu(Menu menu) {
  51:          // Inflate the menu; this adds items to the action bar if it is present.
  52:          getMenuInflater().inflate(R.menu.main, menu);
  53:          return true;
  54:      }
  55:   
  56:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

         以上是activity组件的一些事件。按下按钮 menu 会出现上面的反馈信息。

 

 

      对于第二个问题不多说,直接贴代码

如果我们想要在Activity中得到新打开的Activity关闭后返回的数据,我们必须调用系统给我们提供的方法

startActivityForResutl(intent  ,    request)方法打开新的Activity,新的Activity关闭通过setResult(int resultCode, Intent data),传回数据,然后我们还必须对传回的数据进行处理,这就需要调用系统的onActivityResult(int requestCode, int resultCode, Intent data)方法,我们对其进行覆盖,写一些我们自己的方法。

代码如下:

MainActivity中的代码:

   1:  package com.example.activity_basic;
   2:   
   3:  import android.os.Bundle;
   4:  import android.app.Activity;
   5:  import android.content.Intent;
   6:  import android.view.KeyEvent;
   7:  import android.view.Menu;
   8:  import android.view.MotionEvent;
   9:  import android.view.View;
  10:  import android.widget.Button;
  11:  import android.widget.TextView;
  12:  import android.widget.Toast;
  13:   
  14:  public class MainActivity extends Activity {
  15:      /*onCreate()接口是初始化 Activity 的地方, 在这儿通常可以调用 setContentView()设
  16:      置在资源文件中定义的 UI, 使用 findViewById() 可以获得 UI 中定义的控件.这些在前一篇
  17:      都有介绍。不仅管理着 Android 应用中 View 的显示,还要处理 Android 中用户触发的各种事件。
  18:      这个管理员可还真够忙的啊。*/
  19:      @Override
  20:      protected void onCreate(Bundle savedInstanceState) {
  21:          super.onCreate(savedInstanceState);
  22:          setContentView(R.layout.main);
  23:          //以下是对intent带回来的数据进行反解压, 注:第一次没有数据,getExtras为空,数据报错,所以还只能用第二种方法
  24:  //        Intent intent = this.getIntent();
  25:  //        Bundle bundle = intent.getExtras();
  26:  //        String nameString = bundle.getString("name");
  27:  //        int  age = bundle.getInt("age");
  28:  //        TextView paraView = (TextView)findViewById(R.id.first);
  29:  //        paraView.setText("姓名:"+nameString+"   年龄" + age);
  30:      
  31:          Button button=(Button)findViewById(R.id.next);
  32:          button.setOnClickListener(new View.OnClickListener() {
  33:          
  34:  /*
  35:   * 这个地方我们一定要搞清楚一个问题,现在是MainActivity通过intent,然后intnet调用将数据已经打好包的bundle,将数据传给
  36:   * OtherActivity,然后OtherActivity有自己的反解压函数,来解压我们传过去的数据,但是呢,我们如何知道有么有传成功呢,
  37:   * 这时,我们已经在第一个界面上了,点击返回按钮(手机上自带的),返回到MainActivity,这个里面调用本身自带的onActivityResult方法
  38:   * 用来提示返回的信息,这就相当于TCP通信里面的握手机制,这仅仅是只握了一次。
  39:   * 还有就是我们完全可以不用它自带的方法,也可以自己写方法来解压OtherAcitivity传过来的数据,在这点上,我错了,没有
  40:   * 很好的理解这个问题。第一次没有数据,数据为空
  41:   * 但其本身的方法稍稍简单点,直接用即可。
  42:   */
  43:              @Override
  44:              public void onClick(View v) {
  45:                  // TODO Auto-generated method stub
  46:                  //一串数据量就用bundle,不是的话直接调用一些歌变量即可,bundle可以认为为不同类型数据的结构体变量
  47:                  Intent intent1 = new Intent(MainActivity.this,OtherActivity.class);//激活OtherActivity,此时还没有跳
  48:                  Bundle bundle1 = new Bundle();
  49:                  bundle1.putString("name", "zhu朱");
  50:                  bundle1.putInt("age", 99);
  51:                  intent1.putExtras(bundle1);            //附带上额外的数据
  52:                  //下面这句话很重要,如果需要打开的activity需要给这个(此对象)activity返回数据,就必须用此方法打开activity
  53:                  //而不再用startActivity(intent);
  54:                  /*
  55:                   * 使 用 startActivityForResult(Intent intent, int requestCode) 方 法 打 开 新 的Activity,我们需要为 startActivityForResult()方法
  56:                   * 传入一个请求码( 第二个参数) 。请求码的值是根据业务需要由自已设定,用于标识请求来源。
  57:                   */
  58:                  startActivityForResult(intent1, 1);        
  59:                  //startActivity(intent1);
  60:              }
  61:          });
  62:          
  63:      }
  64:      /*
  65:       * MainActivity 如何获得 OtherActivity 返回的数据呢?那就需要重写 MainActivity 中的
  66:         onActivityResult()方法,你会发现 onActivityResult()方法有三个参数,第一个参数:打开 OtherActivity 的请
  67:         求码,第二个参数:OtherActivity 所设置的返回码,第三个参数:OtherActivity 返回的数据
  68:       */
  69:      /* (non-Javadoc)
  70:       * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
  71:       */
  72:      @Override
  73:      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  74:          // TODO Auto-generated method stub
  75:          //用提示来显示返回的信息
  76:          Toast.makeText(MainActivity.this, data.getStringExtra("name")+ data.getIntExtra("age", 1), 2000).show();
  77:          
  78:          super.onActivityResult(requestCode, resultCode, data);
  79:      }
  80:   
  81:      @Override
  82:      public boolean onCreateOptionsMenu(Menu menu) {
  83:          // Inflate the menu; this adds items to the action bar if it is present.
  84:          getMenuInflater().inflate(R.menu.main, menu);
  85:          return true;
  86:      }
  87:   
  88:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

OtherActivity中的代码:

   1:  package com.example.activity_basic;
   2:   
   3:  import android.os.Bundle;
   4:  import android.app.Activity;
   5:  import android.content.Intent;
   6:  import android.view.KeyEvent;
   7:  import android.view.Menu;
   8:  import android.view.MotionEvent;
   9:  import android.view.View;
  10:  import android.widget.Button;
  11:  import android.widget.TextView;
  12:  import android.widget.Toast;
  13:   
  14:  public class OtherActivity extends Activity {
  15:      /*onCreate()接口是初始化 Activity 的地方, 在这儿通常可以调用 setContentView()设
  16:      置在资源文件中定义的 UI, 使用 findViewById() 可以获得 UI 中定义的控件.这些在前一篇
  17:      都有介绍。不仅管理着 Android 应用中 View 的显示,还要处理 Android 中用户触发的各种事件。
  18:      这个管理员可还真够忙的啊。*/
  19:      @Override
  20:      protected void onCreate(Bundle savedInstanceState) {
  21:          super.onCreate(savedInstanceState);
  22:          setContentView(R.layout.activity_main);
  23:          //以下是对intent带回来的数据进行反解压
  24:          Intent intent = this.getIntent();
  25:          Bundle bundle = intent.getExtras();
  26:          String nameString = bundle.getString("name");
  27:          int  age = bundle.getInt("age");
  28:          TextView paraView = (TextView)findViewById(R.id.other);
  29:          paraView.setText("姓名:"+nameString+"   年龄" + age);
  30:          Button button=(Button)findViewById(R.id.close);
  31:          button.setOnClickListener(new View.OnClickListener() {
  32:              
  33:              @Override
  34:              public void onClick(View v) {
  35:                  // TODO Auto-generated method stub
  36:                  //一串数据量就用bundle,不是的话直接调用一些歌变量即可,bundle可以认为为不同类型数据的结构体变量
  37:                  //千万不要以下面的傻帽方法去返回,这样MainActivity得不到任何值,需要用下面的setResult
  38:              //    Intent intent1 = new Intent(OtherActivity.this,MainActivity.class);       //    startActivity(intent1);
  39:                  Intent intent1 = new Intent();
  40:                  Bundle bundle1 = new Bundle();
  41:                  bundle1.putString("name", "zhuxuekui");
  42:                  bundle1.putInt("age", 26);
  43:                  intent1.putExtras(bundle1);        //直接跳到MainActivity了        ?
  44:                  //设置返回数据,也就是将intent1携带的数据打包好,传走。
  45:                  /*
  46:                   * setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1
  47:                   * 第一个参数就是结果码。这样就全了,MainActivity中有请求码,这边有结果码,然后在MainActivity中,对请求码与结果码以及intent进行处理
  48:                   */
  49:                  OtherActivity.this.setResult(RESULT_OK, intent1);
  50:                  //关闭Activity
  51:                  OtherActivity.this.finish();                
  52:              }
  53:          });
  54:          
  55:      }
  56:      
  57:      @Override
  58:      public boolean onCreateOptionsMenu(Menu menu) {
  59:          // Inflate the menu; this adds items to the action bar if it is present.
  60:          getMenuInflater().inflate(R.menu.main, menu);
  61:          return true;
  62:      }
  63:   
  64:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

    结果如下:

 

 

 

 

 

下面一篇文章写得不错,可以参考一下:

http://blog.csdn.net/qi_ruihua/article/details/20483705

一、如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。


package com.ljq.activitys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity {
private final static String TAG="MainActivity"; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Button btnOpen=(Button)this.findViewById(R.id.btnOpen);
btnOpen.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//得到新打开Activity关闭后返回的数据
//第二个参数为请求码,可以根据业务需求自己编号
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
}
});
} /**
* 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
*
* requestCode 请求码,即调用startActivityForResult()传递过去的值
* resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
Log.i(TAG, result);
}
}

当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。

二、使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:


package com.ljq.activitys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class OtherActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other); Button btnClose=(Button)findViewById(R.id.btnClose);
btnClose.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//数据是使用Intent返回
Intent intent = new Intent();
//把返回数据存入Intent
intent.putExtra("result", "My name is Ricky");
//设置返回数据
OtherActivity.this.setResult(RESULT_OK, intent);
//关闭Activity
OtherActivity.this.finish();
}
}); } }

setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1,代码片断如下:

public class android.app.Activity extends ......{

  public static final int RESULT_CANCELED = 0;

  public static final int RESULT_OK = -1;

  public static final int RESULT_FIRST_USER = 1;

}

运行结果

说明:当点击“打开新的Activity”按钮,会跳转到“我是新打开的Activity”页面;

        当点击“关闭”按钮,关闭当前页面,同时跳转到“我是旧的Activity”页面,且会传递result参数给前一个Activity

请求码的作用   

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

@Override  public void onCreate(Bundle savedInstanceState) {

        ....

        button1.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {

                startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);

           }

        });

        button2.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {

                 startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);

            }

        });

       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

               switch(requestCode){

                   case 1:

                   //来自按钮1的请求,作相应业务处理

                   case 2:

                   //来自按钮2的请求,作相应业务处理

                }

          }

}

结果码的作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

public class ResultActivity extends Activity {

       .....

       ResultActivity.this.setResult(1, intent);

       ResultActivity.this.finish();

}

public class NewActivity extends Activity {

       ......

        NewActivity.this.setResult(2, intent);

        NewActivity.this.finish();

}

public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity

       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

               switch(resultCode){

                   case 1:

                   // ResultActivity的返回数据

                   case 2:

                    // NewActivity的返回数据

                }

          }

}

Activity 事件以及如何得到新打开Activity关闭后返回的数据的更多相关文章

  1. 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出

    关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时  在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...

  2. Android DevArt1:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

    问题描述:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢? GitHub Demo 废话少说,上代码,Activi ...

  3. [android] 开启新的activity获取他的返回值

    应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText的右上,因 ...

  4. 01_创建一个新的activity&activity配置清单文件

    今天开始学四大组件.今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者.四大组件,咱们一天一个.Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面.创建多个 ...

  5. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

  6. Unity3D研究院之打开Activity与调用JAVA代码传递参数

    原地址:http://www.xuanyusong.com/archives/667    Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发 ...

  7. [android]Intent跳转新的Activity可以传递数据过去

    两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...

  8. Android学习(八) 打开Activity

    在Android中打开窗口有两种方式,第一种是不需要返回值的,第二种是带返回值的. Main.xml文件,程序从这个窗口开始执行. <LinearLayout xmlns:android=&qu ...

  9. Android开发在Activity外申请权限调用相机打开相册

    问题描述: 最近在项目中遇到一个需要调用相册和打开相机的需求,但是,在Android 6.0以后,调用相册属于危险权限,需要开发者动态获取,这就意味着我们申请权限是与Activity绑定的,但如果一个 ...

随机推荐

  1. BZOJ4196 [Noi2015]软件包管理器 【树剖】

    题目 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件 ...

  2. inline-block元素垂直对齐

    多个inline-block元素使用vertical-align:middle无法对齐,必须有个height:100%的子元素才行,通常使用伪元素.另一种方法是添加line-height:normal ...

  3. TextBox取不到值及其TextBox取不到js赋的值

    原文发布时间为:2009-10-22 -- 来源于本人的百度文章 [由搬家工具导入] 原因:使用了一个只读的TextBox控件 曾经遇到过这样的问题:使用了一个只读的TextBox控件,但是在后台代码 ...

  4. javaScript防止拦截新窗口打开页面

    原文发布时间为:2009-05-04 -- 来源于本人的百度文章 [由搬家工具导入] 兼容IE.FF.GOOGLE。防止拦截。。。。 <html xmlns="http://www.w ...

  5. 使用C#的BitmapData

    原文发布时间为:2009-01-16 -- 来源于本人的百度文章 [由搬家工具导入] 我在前两篇图片处理的文章里几乎都用BitmapData来做图片处理的,那么这个东东究竟是个什么玩意儿呢? C#好是 ...

  6. [LeetCode] Single Number II 位运算

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  7. Scala不使用null 而使用Option,None,Some的好处

    刚接触Scala时就很奇怪, 为什么Java已经有null了,却偏偏还要弄出个None 后来依然我行我素在Scala里使用null, 结果就是经常被NullPointerException折磨得阴魂不 ...

  8. 2014年国内最热门的.NET开源平台

    http://developer.51cto.com/art/201501/464292.htm

  9. java gc --- 关键词解释

    分代gc java的堆内存主要分为young generation与old generation,这两块分开回收.这就是所谓的分代gc 其中young generation又分为一个eden spac ...

  10. (7)centos7安装配置ftp服务器

    1.安装vsftpd yum install vsftpd -y 2.设置开机启动vsftpd ftp服务 systemctl enable vsftpd.service 3.启动vsftpd服务 s ...