首页 > 代码库 > Android开发学习笔记之四大组件---Activity的跳转,数据传递(二)

Android开发学习笔记之四大组件---Activity的跳转,数据传递(二)

上一章我们温习了Activity的创建,以及各生命周期,这一章我们主要学习Activity的跳转,以及Activity之间的数据传递

一、Activity跳转:

Activity之间的单纯跳转非常简单,只需要创建两个Activity,然后使用startActivity(intent)来进行跳转,看下代码:

Intent uio=new Intent(thisActivityclass,ActivityBclass);startActivity(uio);

Intent是什么?

Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描 述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的 交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

 

二、Activity间数据传递:

以下我们完整编写一个Activity跳转传递数据及返回参数的例子,从Activity A中点击一个按钮,跳转至Activity B,Activity B中有两个按钮,分别点击两个按钮,界面返回到Activity A中并使用toast展示不同的返回参数

1.在Activity A中,批量添加数据至Bundle,并将Bundle添加进intent

        Intent in1=new Intent(this,ActivityB.class);        Bundle bun1=new Bundle();        bun1.putString("姓名", "baihua");        bun1.putString("年龄", "24");        in1.putExtras(bun1);

2.Activity A的按钮点击事件中进行Activity跳转,并使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据

startActivityForResult(in1,30)

3.Acitivity B返回值后,我们需要得到新Activity的回传数据进行逻辑处理,需要重写onActivityResult(int requestCode,int resultCode,Intent data),这里我们定义一下功能需求,如果请求码是30,我们点击Activity B中的按钮,返回学号30的学生的信息,如果请求码是31,我们点击Activity B中的按钮,返回学号31的学生的信息;Activity B中,点击按钮1,返回该学号对应学生的姓名,点击按钮2,返回该学号对应学生的年龄

首先我们处理Activity B中的数据返回

      public void baihinfo(View v)     //对应学号学生的姓名      {            Intent in1=new Intent();            in1.putExtra("姓名", "baih");            //in1.putExtra("年龄", "24");            setResult(2, in1);    //使用setResult返回数据到Activity A中,前一个参数为返回结果码            finish();      //函数处理完后关闭该Activity      }            public void zzzinfo(View v)      //对应学号学生的年龄      {            Intent in2=new Intent();            //in2.putExtra("姓名", "zzz");            in2.putExtra("年龄", "28");            setResult(1, in2);            finish();      //函数处理完后关闭该Activity      }

4.处理Activity A中得到Activity B的返回结果码的逻辑,重写onActivityResult

    public void onActivityResult(int requestCode,int resultCode,Intent data)    {                if(requestCode==30)      //判断如果Activity A点击事件中的请求码是30,则返回学号30的学生         {            if(resultCode==1)    //判断如果返回结果码为1,就使用.getExtras().getString()获取30学生的姓名,为其他就获取年龄,这里逻辑可以更细,不多写了            {                Bundle er=data.getExtras();                String t=er.getString("姓名");                Log.e("baih",t);                Toast.makeText(MainActivity.this, t, 2000).show();            }            else{                Bundle san=data.getExtras();                String y=san.getString("年龄");                Log.e("baih", y);                Toast.makeText(MainActivity.this,y, 2000).show();;            }        }        else{            if(requestCode==31)      //判断如果Activity A点击事件中的请求码是31,则返回学号31的学生             {                if(resultCode==1)                {                    Bundle er1=data.getExtras();                    String x=er1.getString("姓名");                    Log.e("baih",x);                    Toast.makeText(MainActivity.this, x, 2000).show();                }                else{                    Bundle san1=data.getExtras();                    String z=san1.getString("年龄");                    Log.e("baih", z);                    Toast.makeText(MainActivity.this,z, 2000).show();;                }            }                    }

变量没有走规则,其实这个位置,主要是想介绍两个参数,requestCode和resultCode

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

 

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

两个很重要的参数,负责控制Activity数据传输之间的逻辑控制及判断

Activity传输数据主要使用intent.putExtra(String key,value)进行单个参数传递,或者将数据参数集中写入bundle中,使用intent.putExtra(Bundle extras)进行集中传输

 

Android开发学习笔记之四大组件---Activity的跳转,数据传递(二)