zoukankan      html  css  js  c++  java
  • Android学习第八天——使用 Intent 在活动之间穿梭

    1、使用显式 Intent

    Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动服务、以及发送广播等场景
    Intent 的用法大致可以分为两种,显式 Intent 和隐式 Intent:

    显式 Intent如何使用

    Intent 有多个构造函数的重载,其中一个是 Intent(Context packageContext, Class<?> cls)。这个构造函数接收两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个
    参数 Class 则是指定想要启动的目标活动,通过这个构造函数就可以构建出 Intent 的“意图”。
    Activity 类中提供了一个 startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,这里我们将构建好的Intent传入startActivity()方法就可以启动目标活动了。
     
    在原有的项目下新建一个活动SecondActivity,在second_layout.xml 布局文件中写入下面的代码:
     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2 android:layout_width="match_parent"
     3 android:layout_height="match_parent"
     4 android:orientation="vertical" >
     5 <Button
     6 android:id="@+id/button_2"
     7 android:layout_width="match_parent"
     8 android:layout_height="wrap_content"
     9 android:text="Button 2"
    10 />
    11 </LinearLayout>
     
    定义一个按钮用于活动之间的跳转,按钮上显示 Button 2。然后活动 SecondActivity,修改代码如下:
    public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.second_layout);
    } }
    修改 该项目中原活动MainActivity 中按钮的点击事件,代码如下所示:
    1 button1.setOnClickListener(new OnClickListener() {
    2 @Override
    3 public void onClick(View v) {
    4 Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    5 startActivity(intent);
    6 }
    7 });
    我们首先构建出了一个 Intent,传入 MainActivity.this作为上下文,传入 SecondActivity.class作为目标活动,这样我们的“意图”就非常明显了,即在 MainActivity 这个活动的基础上打
    开 SecondActivity 这个活动。然后通过 startActivity()方法来执行这个 Intent
     
                           

    使用隐式 Intent

    相比于显式 Intent,隐式 Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的 action和 category 等信息,然后交由系统去分析这个 Intent,并帮我们找出合适的活动去启动。
     
    通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的 action和 category,打开 AndroidManifest.xml,添加如下代码:
    1 <activity android:name=".SecondActivity" >
    2 <intent-filter>
    3 <action android:name="com.example.activitytest.ACTION_START" />
    4 <category android:name="android.intent.category.DEFAULT" />
    5 </intent-filter>
    6 </activity>
    在<action>标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动
    能够响应的 Intent 中还可能带有的 category。只有<action>和<category>中的内容同时能够匹配上 Intent 中指定的 action 和 category 时,这个活动才能响应该 Intent。
    修改 MainActivity 中按钮的点击事件,代码如下所示:
    1 button1.setOnClickListener(new OnClickListener() {
    2 @Override
    3 public void onClick(View v) {
    4 Intent intent = new Intent("com.example.activitytest.ACTION_START");
    5 startActivity(intent);
    6 }
    7 });
    我们使用了 Intent 的另一个构造函数,直接将 action 的字符串传了进去,表明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action 的活动
     
    <action>和<category>同时匹配上才能响应,但却没有指定category ,这是因为 android.intent.category.DEFAULT 是一种默认的 category,在调用startActivity()方法的时候会自动将这个 category 添加到 Intent 中。
     
    每个 Intent 中只能指定一个 action,但却能指定多个 category。
     
     

    更多隐式 Intent 的用法

    使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得 Android 多个应用程序之间的功能共享成为了可能。比如说你的应用程序中需要展示
    一个网页,这时你没有必要自己去实现一个浏览器(事实上也不太可能),而是只需要调用系统的浏览器来打开这个网页就行了
    修改 MainActivity 中按钮点击事件的代码,如下所示:
    button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent);
    }
    });
    这里我们首先指定了 Intent 的 action 是 Intent.ACTION_VIEW,这是一个 Android 系统内置的动作,其常量值为 android.intent.action.VIEW。然后通过 Uri.parse()方法,将一个网址字符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去。重新运行程序,在 FirstActivity 界面点击按钮就可以看到打开了系统浏览器
    与此对应,我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容。
    1. android:scheme
    用于指定数据的协议部分,如上例中的 http 部分。
    2. android:host
    用于指定数据的主机名部分,如上例中的 www.baidu.com 部分。
    3. android:port
    用于指定数据的端口部分,一般紧随在主机名之后。
    4. android:path
    用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
    5. android:mimeType
  • 相关阅读:
    Java 线程同步
    window.onload 与 $(document).ready() 的区别
    jQuery 合成事件
    Java 线程的生命周期
    Java 控制线程
    jQuery 移除事件
    HTC组件介绍及应用
    CSS链接悬停样式
    ASP.NET读取CSV文件
    SpreadForWin 复制粘贴,剪切行
  • 原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14379714.html
Copyright © 2011-2022 走看看