安卓的组件载体Intent

  Intenr并不是Android的组件,但它的对于Android应用的作用非常大————它是Android不同组件之间的通信载体。

当前界面进入另外一个界面

举个例子:当我们一个界面写的是登录信息比如qq的界面,当登录成功之后就要进入另外一个界面,那么进入另外一个界面就需要用到Intent.

 Intent intent = new Intent(LoginActivity.this, MainActivity.class);//红色是当前界面,黄色是需要转入的界面
            startActivity(intent);

            

返回原界面

   如果只是简单的从一个界面进入到另外一个界面,那么一个startActivity()方法就够用了,但是很多时候我们进了另外一个界面处理完事件之后还得返回上一个界面。

如以下效果:

 

有两种方法可以实现返回上一层界面

1、第一种方法是像从第一个界面进入第二个界面一样,重新定义一个Intent类对象

 Intent ii = new Intent(Main2Activity.this, MainActivity.class);红色是第一个界面,黄色是第二个界面
                startActivity(ii);

2、第二种方法是不适用startActivity()方法,使用另外一种方法startActivityForResult(Intent intent,int requestCode);

从第一个界面进入第二个界面:

Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivityForResult(intent,2);第二个int类型的参数可以为任意值但是必须>=0

第二个界面返回第一个界面:

finish();在第二个界面处理完事件之后只要一个finish()方法就可以返回上一个界面

                 

使用第二种方法还可以更加方便的回传数据(从第一个界面进入第二个界面之后,把第二个界面中的数据带回界面一)

步骤如下:

1、在第二个界面中使用以下代码存入需要回传到第一界面的代码

intent.putExtra("tt","123");

2、在使用finish()方法之前调用setResult()方法

      setResult(3,intent);//3是结果码,可以给定一个任意的值,intent是第二界面中Intent的对象
                finish();

 3、在第一界面中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,方法里面的三个参数  第一个参数requestCode,表示再启动Acitivity是传递的请求码  第二个参数resultCode,表示再返回数据时传入结果码 第三个参data,表示携带返回数据的Intent

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==3&&requestCode==2){黄色是第二界面中给定的数值,红色是在第一界面给定的数值
            String a = data.getStringExtra("tt");//获得从第二界面返回的值
            
        }
    }

                   

很多时候在当前Activity中的信息我们转入到其他Activity时还是要使用,那么这时可以用Intent的方法把变量信息的传到另外一个界面去。

信息传递的方法有两种:

方法一:

发送消息:

 Intent intent = new Intent(MainActivity.this,obvious.class);
                Bundle bundle = new Bundle();
                bundle.putString("name",save_name);//前面的是Key,后面的是需要放入的数据
                bundle.putString("password",save_password);
                bundle.putString("sex",save_sex);
                bundle.putString("city",save_city);
                intent.putExtras(bundle);
                startActivity(intent);

接受消息:

 Bundle bundle = this.getIntent().getExtras();
       String tname = bundle.getString("name");//接收前一个界面穿过来的Key
       String tpassword = bundle.getString("password");
       String tsex = bundle.getString("sex");
       String city = bundle.getString("city");

方法二:

发送消息:

     
Intent intent = new Intent(MainActivity.this,obvious.class);
          intent.putExtra("name",save_name);
                intent.putExtra("password",save_password);
                intent.putExtra("sex",save_sex);
                intent.putExtra("city",save_city);
startActivity(intent);

接收消息:

Intent intent = getIntent();
        tname = intent.getStringExtra("name");
        tpassword = intent.getStringExtra("password");
        tsex = intent.getStringExtra("sex");
        city = intent.getStringExtra("city");

两种方法的区别是有没有Bundle类的区别,用法上都差不多

原文地址:https://www.cnblogs.com/lyd447113735/p/8027215.html