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. ionic2添加自定义文字

    上次更新到如何添加自定义图标,紧接着这次更新ionic2如何添加自定义字体 首先你要有自己的字体文件以.ttf结尾的文件字体 :推荐个字体文件网站(相对来说流氓软件比较少的)http://www.ps ...

  2. [暑假集训--数论]poj2773 Happy 2006

    Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD ...

  3. 小M的作物 最大权闭合子图

    题目大意 bzoj 3438 两个田\(A,B\) \(n\le 1000\)种作物的种子 第\(i\)个种子,种\(A\)价值\(a[i]\),种\(B\)价值\(b[i]\) 再给出\(m\)个子 ...

  4. border:none;和border:0;的区别

    一.是理论上的性能差异 [border:0;]把border设为“0”像素虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已 ...

  5. ThreadPool基础之RegisterWaitForSingleObject

    原文发布时间为:2010-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 首先我们看一下它的原型: Codepublic static RegisteredWaitHandle Regis ...

  6. Android Win7 上使用cmd生成Jks

    Android Win7 上使用cmd生成Jks cmd 命令 C:\Program Files\Java\jre1.8.0_111\bin>keytool -genkeypair -alias ...

  7. webservice测试工具

    webservice测试工具      web service exprlorer 

  8. Linux signal那些事儿【转】

    转自:http://blog.chinaunix.net/uid-24774106-id-4061386.html Linux编程,信号是一个让人爱恨交加又不得不提的一个领域.最近我集中学习了Linu ...

  9. compensation 在 spec 上的意義

    compensation 翻譯為補償, 之前觀念都認為補償都是正的, 原來補償也可以負的, 例子: 電池充電電流在 10 - 45 度為 1800 mA, 在 0 - 10 度時,jeita 補償 1 ...

  10. Syslog协议日志格式翻译

    通用日志格式规范(参考 RFC5424 Syslog协议) 下面是RFC5424 Syslog协议关于信息格式的定义. Syslog信息的格式定义 # 一条信息的构成 SYSLOG-MSG = HEA ...