Intent和Activity

来源:互联网 发布:java multieditor 编辑:程序博客网 时间:2024/05/18 15:53

    在学习了组件Activity之后,就必不可少的需要了解Intent。首先介绍一下Intent,它的中文翻译为“意图”,它最常见的用途是绑定应用程序组件,并在应用程序之间进行通信。Intent一般用于启动Activity、启动服务、发送广播等,承担了Andriod应用三大核心组件相互间的通信功能。

一、Intent用于开启Activity

    我们创建一个Activity,在它的click()方法中定义一个Intent对象,该对象用于开启另一个新的Activity:

    //界面中按钮的点击事件
     public void click(View view) {
          //创建一个Intent对象,通过该对象开启第2个Activity
          Intent intent = new Intent(this, Activity02.class);
          startActivity(intent);
     }

   上述方法是一个显式意图,用在相同应用中启动其他Activity。通过Intent的构造方法来创建Intent对象,构造方法接收两个参数,第一个参数Context要求提供一个启动Activity的上下文,第二个参数class则是指定要启动的目标Activity,通过构造方法就可以构建出Intent对象。除了通过指定类名开启组件外,显示意图还可以根据目标组件的包名、全路径名来指定开启组件,代码如下:    

     intent.setClassName("cn.itcast.xxx","cn.itcast.xxx.xxxx");

     startActivity(intent);

    有了显式意图,当然就有隐式意图,即没有明确指定组件名的Intent,其功能比显式意图更加强大,可以开启其他应用的组件。Android系统根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件:

     <activity android:name="com.itcast.intent.Activity02>

         <intent-filter>

             <!--设置action属性,需要在代码中根据所设置的name打开指定的组件-->

                <action android:name="cn.itcast.xxx"/>

                       <category android:name="android.intent.category.DEFAULT"/>

               </intent-filter>

         </activity>

    用隐式意图开启Activity的代码如下:

     Intent intent = new Intent(this, Activity02.class);

     //设置动作和清单文件一样

     intent.setAction("cn.itcast.xxx");

     startActivity(intent);

二、Intent用于Activity之间传递数据

    使用Intent传递数据只需调用putExtra()方法将想要存储的数据存在Intent中,当启动另一个Activity后,再把这些数据从Intent中取出即可。现在,Activity01中存储了一个字符串,我们要把它传递到Activity02中,首先可以通过显式意图开启Activity02,并通过putExtra()方法传递了一个字符串data:

     String data = "hello Activity02"

     Intent intent = new Intent(this, Activity02.class);

     intent.putExtra("extra_data",data);

     startActivity(intent);

    putExtra()方法中的第一个参数接收的key,第二个参数接收的是value,在Activity02取出传递过来的数据:

     Intent intent = getIntent();

     String data = intent.getStringExtra("extra_data");

     Log.i("Activity02",data);

    如果调用putExtras()方法则传递的是Bundle对象,需要先创建对应的Bundle对象:

     Bundle bundle = new Bundle();

     bundle.putString("name","Linda");

     bundle.putInt("age",20);

     Intent intent = new Intent(this, Activity02.class);

     intent.putExtras(bundle);

     startActivity(intent);

    Activity02中的代码应为:     

     Intent intent = getIntent();

     Bundle bundle = intent.getExtras();

     String stuName = bundle.getString("name");

     int stuAge=bundle.getString("age");

    用Intent传递数据以及对象时,它的内部也是调用了Bundle对象相应的put()方法。

0 0
原创粉丝点击