Intent不仅用来启动一个活动,Intent还可以在启动活动的时候传递参数。

1.向下一个活动传递数据

启动活动的时候传递数据,Intent提供了一系列putExtra()方法的重载,可以把要传递的数据暂存在Intent中,启动了另一个活动后,

只需要把这些数据再从Intent中取出就可以了。

例如FirstActivity中有一个字符串,现在把这个字符串传递到SecondActivity中,代码如下:

button1.setOnClickListener(new OnClickListener() {

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

            }
        });

上面的代码中用显示Intent方式来启动SecondActivity,然后通过putExtra()方法传递了一个字符串。

putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数是真正要传递的数据。

然后在SecondActivity中将传递的参数取出,并打印出来,代码如下:

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.second_layout);

            Intent intent = getIntent();
            String data = intent.getStringExtra("extra_data");
            Log.d("SecondActivity", data);
}

上述的代码中,通过getIntent()方法获取到用于启动SecondActivity的Intent,通过getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。

注意:传递字符串用getStringExtra();  整型数据用getIntExtra();传递布尔型数据用getBooleanExtra()。

2.返回数据给上一个活动

Activity中有一个startActivityForResult()方法也可以用来启动活动,

startActivityForResult (Intent intent, int requestCode)方法接收两个参数:
                 * 第一个参数还是Intent;
                 * 第二个参数是请求码,用来在之后的回调中判断数据的来源。

修改FirstActivity中按钮的事件,代码如下:

button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
    //请求码只要是一个唯一值就可以。
    startActivityForResult(intent, 1);

            }
        });

这里,使用startActivityForResult()方法来启动SecondActivity,请求码只要是一个唯一值就可以。
然后修改SecondActivity中按钮的点击事件,并添加返回数据的逻辑代码,代码如下:

        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return", "Hello FirstActivity");
                //调用setResult()方法,该方法专门用于向上一个活动返回数据的。
                //setResult()方法接收首歌参数,第一个参数用于向上一个活动返回处理结果,一般使用RESULT_OK或RESULT_CANCELED
                //第二个参数是把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动。
                setResult(RESULT_OK, intent);
                finish();

            }
        });

上述代码中还是要创建一个Intent,这个Intent仅仅用来传递数据,它没有指定任何意图。把要传递的数据存放在Intent中,然后调用setResult()方法

接收两个参数。

调用setResult()方法,该方法专门用于向上一个活动返回数据的。setResult()方法接收两个参数,

*第一个参数用于向上一个活动返回处理结果,一般使用RESULT_OK或RESULT_CANCELED
          *第二个参数是把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动。

因为使用startActivityForResult()方法来启动SecondActivity活动的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,所以需要在FirstActivity中重写onActivityResult()方法来得到返回数据。onActivityResult (int requestCode, int resultCode, Intent data)方法带有三个参数:
     * 第一个参数:requestCode,是在启动活动时传入的请求码;
     * 第二个参数:resultCode,返回数据时传入的处理结果。
     * 第三个参数:data,带有返回数据的Intent。
在一个活动中有可能调用startActivityForResult()方法去启动不同的活动,每一个活动返回的数据都会回调到onActivityResult() 这个方法中,所以首先检查requestCode的值来判断数据来源,然后在通过resultCode的值来判断处理结果是否成功, 最后在从Intent中取返回的数据。

如果在SecondActivity中不是通过按钮返回FirstActivity,而是通过Back键返回,这样怎么返回数据呢?
在这里,如果通过Back键返回数据,可以通过在SecondActivity中重写onPressed()方法来返回数据,代码如下:

//如果不是通过SecondActivity中的按钮在返回,而是通过按钮Back键来返回,这就需要重写onBackPressed()方法来返回数据
    public void onBackPressed(){
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello FirstActivity");
        setResult(RESULT_OK, intent);
        finish();
    }

这样,当用户按下Back键,程序就会执行onPressed()方法。

Android学习笔记(五)的更多相关文章

  1. android学习笔记五——AutoCompleteTextView

    AutocompleteTextview ==> 使用比较容易,只需要为其设置一个Adapter,该Adapter封装其需要预设的文本内容. 如下所示实例: <RelativeLayout ...

  2. android学习笔记五

    Android中的category大全 Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6): android.intent.category.ALTERNATIVE a ...

  3. Android学习笔记五:四大组件(转)

    转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...

  4. android学习笔记五。2、其他组件

    一.ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1.使用: 在应用中使用C ...

  5. android学习笔记五。1、Service深入学习

    一.Service,服务是没有界面而在后台长期运行的程序,可以看做是后台的Activity. 1.在Android中按返回键退出一个应用并不会(内存充足时)直接销毁一个进程,所以其中的子线程也可以在后 ...

  6. 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

    目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...

  7. 【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference

    目录(?)[-] 例子1ListPreference小例子 定义一个preferences XML文件 继承PreferenceActivity 用户定制偏好的读取 第一次运行时设置缺省值 设置Cat ...

  8. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  9. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  10. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

随机推荐

  1. 用Gen8服务器来学习虚拟化ESXI

    虚拟化和云计算是这几年的热门技术,VMware公司是虚拟化的领头羊,小坦克我有幸在VMware从事这方面的测试工作. 本系列将会讲述我学习虚拟化的一些经历. 将会覆盖一些虚拟化产品: 比如:VMwar ...

  2. 10个优秀的JavaScript Web UI库/框架推荐

    在进行Web开发时,并非所有的库都适合你的项目,但你仍需要收藏一些Web UI设计相关的库或框架,以在你需要的时候,加快你的开发效率. 本文为你带来10款非常优秀的基于JavaScript的Web U ...

  3. Reflector反编译WinForm程序重建项目资源和本地资源

    工具:vs2012..NET Reflector8.1.0.35 要解决的问题: 通过Reflector反编译生成的代码可以编译通过并显示窗体的本地资源和项目资源图片 一.测试项目 两个图片分别放在项 ...

  4. 学习Django

    1.安装 命令:pip install Django 安装慢且有异常:HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ...

  5. ExtJs中gridpanel分组后组名排序

    /** * 定义降序的groupingStore */ var DescGroupingStore = Ext.extend(Ext.data.GroupingStore, { groupDir : ...

  6. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  7. Android - 定时服务 - Timer

    注:在项目中,有时可能会有一些定时执行的任务,这时,一般都会在一个service中写一个定时器. 例: Service类: import java.util.Timer; import java.ut ...

  8. AD 10 原理图编译错误

    在编译原理图时,经常会出现以下错误和警告,这里简单的累出一些错误和警告的原因: 1.floating net labels,这个是应为网标防止错误,应该将网标放在I/O或这连线的端点,或者是网标表错了 ...

  9. 4、android BroadcastReceiver详细用法

    BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播. 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这 ...

  10. jQuery 实现菜单

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...