Android Activity的跳转与传值详解

Android Activity的跳转与传值详解

Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。

Intent是Android一个很重要的类。Intent直译是“意图”,什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图。Intent类在Android系统中的作用很大,在此不详细说了,后面有文章介绍!

Activity跳转,无返回结果

这是最简单的Activity跳转方式。从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activity.this, 下一Activity.class))。

((Button) findViewById(R.id.Notepadv1)).setOnClickListener( new OnClickListener() { public void onClick(View v) { startActivity(new Intent (MyAndroidAppActivity.this, Notepadv1.class) ); } });

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:

static final int SEND_SMS_REQUEST = 0; static final int CALL_REQUEST = 1; ((Button) findViewById(R.id.sms)).setOnClickListener( new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MyAndroidAppActivity.this, SendSMSActivity.class); startActivityForResult(intent, SEND_SMS_REQUEST); } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SEND_SMS_REQUEST) { if (resultCode == RESULT_OK) { Toast.makeText(this, "Send SMS RESULT_OK", Toast.LENGTH_SHORT).show(); }else if (resultCode == RESULT_CANCELED) { Bundle bundle = data.getExtras(); String phoneno = bundle.getString("phoneNO"); Toast.makeText(this, "Send SMS RESULT_CANCELED "+phoneno, Toast.LENGTH_SHORT).show(); } }else if (requestCode == CALL_REQUEST) { if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "Call RESULT_CANCELED", Toast.LENGTH_SHORT).show(); } } }

SendSMSActivity:

((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { SendSMSActivity.this.setResult(RESULT_OK); SendSMSActivity.this.finish(); } }):

** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

RESULT_OK和RESULT_CANCELED是系统空间里面的常量,不需要自定义,直接使用就行。

另外在运行过程中,发现按Back键后,是可以返回RESULT_CANCELED的,看了SDK doc后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回RESULT_CANCELED时并返回数据,那么需要截获Back键的事件处理,把原来返回RESULT_CANCELED的核心逻辑copy到事件处理里面。这里给个例子:

((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { // 实例化 Bundle,设置需要传递的参数 Bundle bundle = new Bundle(); bundle.putString("phoneNO", "020-123"); SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle)); SendSMSActivity.this.finish(); } }); @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 是否触发按键为back键 if (keyCode == KeyEvent.KEYCODE_BACK) { // 实例化 Bundle,设置需要传递的参数 Bundle bundle = new Bundle(); bundle.putString("phoneNO", "020-123"); setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle)); this.finish(); return true; }else { return super.onKeyDown(keyCode, event); } }

这里要注意的是,在处理Back键事件后return true则表示本事件不再传递给其他函数处理,可理解为由当前函数全权负责处理,所以在return前finish当前Activity,保持原来的行为表现,当然我们可以设置为隐藏当前Activity等其他行为。

Activity传送数据

在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。那么,从原来的Activity A传送数据到新的Activity B, Activity B如何获取传送过来的Intent参数时呢?最近写了这样的一个例子:

In Activity A:

// 在某个按钮响应事件里 Intent intent = new Intent(this, TextInputActivity.class); intent.putExtra("Text", mText); intent.putExtra("TextColor", mTextColor); intent.putExtra("TextSize", mTextSize); intent.putExtra("TextBold", mTextBold); startActivityForResult(intent, REQUEST_TEXT);

In Activity B:

// in onCreate(Bundle savedInstanceState) Bundle extras = getIntent().getExtras(); mText = extras.getString("Text"); mTextColor = extras.getInt("TextColor"); mTextSize = extras.getFloat("TextSize"); mTextBold = extras.getBoolean("TextBold");

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-10-23 09:05:25

Android Activity的跳转与传值详解的相关文章

Android Activity 与Service进行数据交互详解_Android

①从设计的角度来讲: Android的Activity的设计与Web页面非常类似,从页面的跳转通过连接,以及从页面的定位通过URL,从每个页面的独立封装等方面都可以看出来,它主要负责与用户进行交互. Service则是在后台运行,默默地为用户提供功能,进行调度和统筹.如果一棵树的地上部分是Activity的话,它庞大的根须就是Service.Android的服务组件没有运行在独立的进程或线程中,它和其他的组件一样也在应用的主线程中运行,如果服务组件执行比较耗时的操作就会导致主线程阻塞或者假死,从

Android Activity启动模式之standard实例详解

本文实例讲述了Android Activity启动模式之standard.分享给大家供大家参考,具体如下: Android的活动是通过任务Task来进行管理的,一个任务就是一组放在栈里的活动的集合,即所谓的返回栈(Back Stack).栈具有先进后出.后进先出的特性.当启动一个活动时,活动会在返回栈中入栈,处于栈顶位置,当按下返回键或者调用finish方法会销毁一个活动,此时栈顶活动会出栈,届时又会有新的活动处于栈顶位置. 在Android中,活动的启动模式有四种,根据不同的需求可以为活动设置

Android Activity 与Service进行数据交互详解

①从设计的角度来讲: Android的Activity的设计与Web页面非常类似,从页面的跳转通过连接,以及从页面的定位通过URL,从每个页面的独立封装等方面都可以看出来,它主要负责与用户进行交互. Service则是在后台运行,默默地为用户提供功能,进行调度和统筹.如果一棵树的地上部分是Activity的话,它庞大的根须就是Service.Android的服务组件没有运行在独立的进程或线程中,它和其他的组件一样也在应用的主线程中运行,如果服务组件执行比较耗时的操作就会导致主线程阻塞或者假死,从

Android开发中Activity创建跳转及传值的方法_Android

在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider). 今天所介绍的就是Android开发中的四大组件之一:Activity,其他那三大组件以后再进行介绍.说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制器).在应用中能看到的东西都是放在活动中的.活动是安卓开发比较重要的东

Android四大组件之——Activity的生命周期(图文详解)

      转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Android四大组件学习系列Activity篇]       1.Android四大组件之--Activity(一)定义.状态和后退栈(图文详解)       2.Android四大组件之--Activity的生命周期(图文详解)      上一篇文章讲了Activity的定义.状态和后退栈,现在讲讲A

Android编程中activity的完整生命周期实例详解_Android

本文实例分析了Android编程中activity的完整生命周期.分享给大家供大家参考,具体如下: android中 activity有自己的生命周期,对这些知识的学习可以帮助我们在今后写程序的时候,更好的理解其中遇到的一些错误.这篇文章很长,希望不要耽误大家的时间- 今天不会涉及太多关于activity栈的东西,主要说activity自身的生命周期 区分几个概念 1 Activity 官方解释为 "An Activity is an application component that pro

Android编程中context及全局变量实例详解_Android

本文实例讲述了Android编程中context及全局变量的用法.分享给大家供大家参考,具体如下: 今天在研究context的时候,对application和activity context有了一定的了解,下面是从网上复制过来的资料 Application context和Activity context的区别: 这是两种不同的context,也是最常见的两种.第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随ap

Android 两种启动模式的实例详解

Android 两种启动模式的实例详解 Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT 1. 如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里

Android Fragment滑动组件ViewPager的实例详解

Android Fragment滑动组件ViewPager的实例详解 1适配器FragmentPagerAdapter的实现 对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了. public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyFragmentPagerAdapter