Android学习笔记(四)——再探Intent

  //此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!

  我们可以使用 Intent 来启动一个活动, 还可以在启动活动的时候传递数据的,下面一起来看一下:

一、向下一个活动传递数据
  Intent中提供了一系列 putExtra()方法的重载,可以把我们想要传递的数据暂存在 Intent 中,启动了另一个活动后,只需要把这些数据再从Intent 中取出就可以了。例如我们可以在mainactivity中创建一个字符串,然后把它传递到second_activity里:

  1)先在MainActivity中构建好Intent: 

@Override
public void onClick(View v) {
    String data = "Hello second_activity";
    Intent intent = new Intent(MainActivity.this, second_activity.class);
    intent.putExtra("extra_data", data);
    startActivity(intent);
}

  我们使用显式 Intent的方式来启动 second_activity,并通过 putExtra()方法传递了一个字符串。注意这里 putExtra()方法接收两个参数,第一个参数是键名,用于后面从 Intent中取值,第二个参数才是真正要传递的数据。

  2)在second_activity中将intent的数据提取出来: 

 1 public class second_activity extends Activity {
 2
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.secend);
 7         Intent intent = getIntent();
 8         String data = intent.getStringExtra("extra_data");
 9         Log.d("SecondActivity", data);
10     }
11
12 }

  这里我们通过 getIntent()方法获取到用于启动 second_activity 的 Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。这里由于我们传递的是字符串,所以使用 getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,传递的是布尔型数据,则使用 getBooleanExtra()方法,以此类推。

  此时启动程序,运行效果如下:

  

  按下button 1后可看到logcat中将传入的字符串打印出来了:

  

二、将数据返回给上一个活动
  Activity中有一个 startActivityForResult()方法也是用于启动活动的, 这个方法在活动销毁的时候能够返回一个结果给上一个活动。我们可以在这里使用它:

  1)修改MainActivity中的onClick()方法: 

1 button1.setOnClickListener(new OnClickListener() {
2     @Override
3     public void onClick(View v) {
4     Intent intent = new Intent(MainActivity.this, second_activity.class);
5     startActivityForResult(intent, 1);
6     }
7 });

  这里我们使用了 startActivityForResult()方法来启动 second_activity,请求码只要是一个唯一值就可以了,这里传入了 1即可。

  2)在second_activity中注册一个button 2,添加返回数据的逻辑:

 1 public class second_activity extends Activity {
 2     @Override
 3     protected void onCreate(Bundle savedInstanceState) {
 4         super.onCreate(savedInstanceState);
 5         setContentView(R.layout.second);
 6
 7         Button button2 = (Button) findViewById(R.id.button_2);
 8         button2.setOnClickListener(new OnClickListener() {
 9             @Override
10             public void onClick(View v) {
11            Intent intent = new Intent();
12             intent.putExtra("data_return", "Hello MainActivity");
13             setResult(RESULT_OK, intent);
14             finish();
15             }
16         });
17     }
18 }            

  我们构建了一个 Intent,只不过这个 Intent 仅仅是用于传递数据而已,它没有指定任何的“意图” 。紧接着把要传递的数据存放在 Intent 中,然后调用了 setResult()方法。这个方法是专门用于向上一个活动返回数据的。setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用
了 finish()方法来销毁当前活动。

  3)重写主活动的onActivityResult()方法:
  由于我们是使用 startActivityForResult()方法来启动 second_activity的, 在 second_activity被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在 MainActivity 中重写这个方法来得到返回的数据:

 1 @Override
 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 3     switch (requestCode) {
 4     case 1:
 5             if (resultCode == RESULT_OK) {
 6             String returnedData = data.getStringExtra("data_return");
 7             Log.d("MainActivity", returnedData);
 8             }
 9             break;
10     default:
11     }
12 }        

  onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传入的请求码。 第二个参数 resultCode, 即我们在返回数据时传入的处理结果。 第三个参数 data,即携带着返回数据的 Intent。

  因为一个主活动可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到 onActivityResult()这个方法中。所以我们需要先判断requestCode(请求码)来确定活动的来源,在通过resultCode来判断活动执行的情况。

三、在按下back键时传回数据

  在上面的例子中我们是通过按下button 2 来返回数据的,假如想通过按下back键来传递数据呢?这是我们可以通过重写second_activity中的 onBackPressed()方法:

1 @Override
2     public void onBackPressed() {
3     Intent intent = new Intent();
4     intent.putExtra("data_return", "Hello FirstActivity");
5     setResult(RESULT_OK, intent);
6     finish();
7 }

  //End.

时间: 2024-10-12 02:55:31

Android学习笔记(四)——再探Intent的相关文章

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

Android 学习笔记(10)—— Intent 基本运用

作者:夏至 欢迎转载,也请保留这段申明,谢谢 最近太忙了,都没什么时间来整理,前9个上传之后格式不对,都没好好整理,以后会抽空整理. Android的通信桥梁 -- Intent . 使用一个activity实在是太简单了,布局上也有限,那我们能不能像我们真机上的一样,一点就跳到另一个界面去了.这里我们就使用Intent,在活动中穿梭.至于为什么学着UI组件,突然跑到这个家伙来,那当然是为下一节做准备啦.除了活动,它还可以是服务或者广播.启动可以下列方法: startActivity(Inten

Android学习笔记(八) Intent

在一开始学习Android的过程中,对于Intent并没有太深入的理解,以为Intent只是作为一个传数据的中间对象,但是随着学习内容的增多,发现Intent的机制实际上贯穿于整个Android的过程: 1.Intent启动:Intent的传输数据只是作为其中一个重要的功能而存在,但是其更重要的作用在于启动/调用的机制,Android如何启动/调用一个应用.组件,首先需要的是一个定位的过程,需要启动哪个组件?指定的某个组件.或者是某个类型的组件,通过抽象成Intent进行统一的调用,只要对Int

Android学习笔记(十一) Intent

一.Intent对象的基本概念 -Intent是Android应用程序组件之一 -Intent对象在Android系统当中表示一种意图 -Intent当中最重要的内容是action与data 二.Intent对象的基本使用方法 Intent intent = new Intent(); intent.setClass(MainActivity.this,OtherActivity.class); //此处放入putExtra语句用于存放数据 startActivity(intent); 三.使用

Android 学习笔记四:创建工具栏按钮

原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏幕很小,所以很多时候我们会需要用到工具栏,通过下拉菜单之类的方式来节省空间. Android 提供了对工具栏按钮的强大支持. 增加一个工具栏按钮 我们现在给 MainActivity 增加一个搜索按钮.增加一个按钮需要做这三件事 一,在 res/menu/activity_main.xml 中增加一

Android学习笔记四之Activity

Android四大组件之Activity 1.什么是Activity Activity是Android四大组件之一,用于显示View.Activity是一个应用程序组件,提供一个用户交互的接口,其本身是没有界面的,Activity类创建一个窗口,在上面可以绘制用户接口.窗口通常充满屏幕,也可以小于屏幕而悬浮于其他窗口之上. 开发者可以通过Activity类提供的setContentView(View)接口将View放到Activity创建的窗口上.一个程序一般由多个Activity组成,他们通常

Android学习笔记(四)

2.      Settings.System.getInt(ContentResolvercr, String name, int def)方法从系统设置(settings)参数的集合中取出名称为name的参数的参数值,如果系统设置中没有该参数,则返回默认值def. 3.      Activity的函数setVolumeControlStream(intstreamType)用于设置所在Activity中音量控制键控制的音频流,一般在onCreate()函数中设定.其中,streamType

Android学习笔记三:用Intent串联activity

一:Intent Intent可以理解为 意图. 我们可以通过创建intent实例来定义一个跳转意图,意图包括:要跳转到哪个页面.需要传递什么数据. 然后通过startActivity(intent)来启动跳转. 有两种方式定义Intent:显式Intent.隐式Intent. 二:显式Intent 1)我们可以在actvity的java文件中,通过代码显示定义Intent,参数为:从哪个页面,跳转到哪个页面. Intent intent = new Intent(FirstActivity.t

Android学习笔记(三四):再谈Intent(上)-一些知识

在Android学习笔记(七):多个Activity和Intent中,我们先在学会了如何使用intent在代码中唤起activity.此处作深一步地学习. 什么是Intent intent是对一个操作处理的抽象描述.context可以在使用startActivity(intent)来launch一个actvivity,就如我们在学习笔记(七)中的处理,也是最常用的方式,将activity在我们的应用中整合:可以在通过sentBroast(intent)来广播给任何有兴趣的BroadcastRec

Android学习笔记(三五):再谈Intent(下)-一些实践

Android的UI框架要求用户将他们的app分为activity,通过itent来进行调度,其中有一个main activity由Android的launcher在桌面中调用.例如一个日历的应用,需要查看日历的activity,查看单个事件的activity,编辑事件的activity等等.在查看日历的activity中,如果用户选择的某个事件,需要通过查看事件的activity来处理.这就是最近本的app UI框架,本次,我们将学习如何通过intent来完成. Activity之间的关系 某