zoukankan      html  css  js  c++  java
  • 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)进行集中传输

  • 相关阅读:
    [转][Navicat for MySQL系列]Navicat如何使用(二)
    [转]Syntax error on token "Invalid Character", delete this token 的解决
    [转] valuestack,stackContext,ActionContext.之间的关系
    [转]jquery后代和子元素的区别
    python中模块、包、库的区别和使用
    python函数对象
    list深拷贝和浅拷贝
    json中load和loads区别
    变量作用域
    正则里的.*和.*?区别
  • 原文地址:https://www.cnblogs.com/cologne/p/4123433.html
Copyright © 2011-2022 走看看