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)进行集中传输

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。