Intent的使用

Intent是android程序中各组件之间进行交互的一种重要方式,既可以在不同组件之间传递数据,还能指明当前组件想要执行的动作。

Intent可被用于启动活动、启动服务、以及发送广播等。大致分为两种使用方式:显示Intent和隐式Intent。这里主要讲启动活动。

1.显示Intent

(1)跳转到下个活动

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
直接在代码中new一个Intent即可,其中第一个值是context,一般是当前活动.this即可,第二个值是Class类型的,一般传入目标活动.class即可。

然后通过调用startActivity()方法即可实现跳转。

(2)携带数据跳转到下个活动

可以这样传值:

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra("name","Li");
                startActivity(intent);
可以使用Intent的putExtra()方法携带值并传递给目标活动,其中putExtra()方法的第一个参数是键,第二个参数是要传递的值。

在第二个活动中如何去到传递的值呢?

        Intent intent = getIntent();
        String s = intent.getStringExtra("name");

可以通过getIntent()方法得到Intent对象,然后调用他的get....方法去取得传递的值,由于刚才传递的值是String类型的,所以这里调用getStringExtra()方法,其中需要传递的参数是传递值的键名,在这里也就是"name"。

(3)返回数据给上个活动

有时候我们可能需要在返回上个活动的时候传递一些数据回去,这该怎么做呢?

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent,1);

可以看到,在跳转时我们不再使用startActivity()方法,而是使用startActivityForResult()方法,其中第一个参数是一个Intent对象,表明意图,第二个参数是请求码,唯一即可,下面会讲到。

在第二个活动中回传需要传递的数据:

                Intent intent = new Intent();
                intent.putExtra("age",18);
                setResult(RESULT_OK,intent);

可以看到我们先new了一个空的Intent对象,这个对象只是为了传递数据,调用putExtra()方法传入键值,接下来调用了setResult()方法,这个方法接收两个参数,第一个是结果码,用于向上一个活动返回处理结果,第二个参数就是一个带有数据Intent。

在返回上个活动后如何得到返回值呢?

需要在第一个活动中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,这个方法有三个参数,第一个是请求码,也就是我们在第一个活动设置的1,第二个是结果码,在第二个活动中设置的RESULT_OK(这是自带的一个常量,还有个为RESULT_CANCELED),都可以使用,也可以自己写,唯一即可,第三个参数就是返回的带数据的intent了,只有当前两个参数等于我们设置的值时,intent才是我们需要的:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode==1&&resultCode==RESULT_OK){
            int age = data.getIntExtra("age",-1);
        }
    }
这里的getExtra()传入两个参数,第一个是键名,第二个是如果没有取到的默认返回值。

2.隐式Intent

隐式Intent在需要跳转时并不明确的指出要启动哪个活动,而是在跳转的活动中配置了action和category属性,然后由系统判定应该打开哪个活动,一个活动只能有一个action但是却可以有很多个category。

在AndroidManifest.xml我们对第二个活动(也就是要跳往的活动)进行如下配置:

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START"/>
                <category android:name="com.example.activitytest.MY_CATEGORY"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>


可以看到我们配置了action和category两个标签,后面的name是自定义的,一般我们用包名.自定义名即可。至于第三个category是必须加上的,因为在跳转时候会默认添加这个category,否则将会报错。

那么在第一个活动中我们该如何实现跳转呢?

                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);

我们可以看到在new intent()的时候我们传入了action的值,然后调用addCategory()加了一个category,只有当action和category都匹配时才会跳转,由于在这里系统会默认增加一个名为android.intent.category.DEFAULT的category,因此在上边我们才必须加一个category。当没有可响应的活动时,就会报错:



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值