Intent是从一个activity到另一个activity的重要工具。Intent分为显性Intent和隐形Intent,本文主要分别讲述这两种Intent的用法,区别大家可以自己思考。
一、显性Intent:
显性Intent较隐性Intent来说稍微简单些,其大致使用形式为
Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);
这样通过这两句语句就可以开启SecondActivity这个Activity了,相对来说是比较简单的
但是有时候我们不仅仅满足于打开另一个Activity,我们还想要在两个Activity之间传递一些数据,所以要将数据添加到Intent里面,然后传递到另一个Activity中,具体代码如下
Intent intent =new Intent(this,SecondActivity.class);
intent.putExtra("name","zhangsan");
putExtra方法中有两个参数,第一个是我们的key,用来标记一条信息;第二个是我们要传递信息了,可以是String,int,float等多种类型
这样我们就将需要传递的值放在了intent中,并发送到了SecondActivity中在SecondActivity中添加以下代码:
Intent intent = getIntent();
String name=intent.getStringExtra("name");
首先通过getIntent()来获取从上一个Acticity中传递过来的Intent,再通过getStringExtra()方法来获取我们需要的值,里面的参数是我们之间设置过的信息的key
这样我们便将一条信息从一个Acticity传递到另一个Activity中了,但是我们这只是单方面的传值,如果我们想从第一个Activity跳转到第二个Activity中,在第二个Activity销毁时跳转到第一个Activity中并回馈给第一个Activity一些值该怎么做?
当然我们的Intent还是可以完成的:
Intent intent=new Intent(this,SecondActivity.class);
startActivityForResult(intent,1);
我们改变了一下开启一个Intent的方法,startActivityForResult()顾名思义:开启一个活动目的是获得结果,第一个参数是我们要开启的Intent,第二个参数是RequestCode,接下来我们需要在另一个Activity中设置反馈的值:
Intent intent=new Intent(this,FirstActivity.class);
intent.putStringExtra("name","zhangsan");
setResult(1,"Intent");
finish();
这样,我们的Intent就成功反馈回去了,并且调用finish()方法会销毁当前的Activity,返回到第一个Activity中,我们在第一个Activity需要做的就是获取反馈回来的数据,我们需要重写onActivityResult(int requestCod,int resultCode,Intent data)这样一个方法,当有Intent返回时就会自动调用这个方法,我们来实现重写一下:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode==1&&resultCode==1){
String name=data.getStringExtra("name);
}
}
这样我们就成功的得到了反馈回来的数据了。
二、隐性Intent
隐性Intent并不象显性Intent那样明确,我们在清单文件里注册一个Activity时要为其多配置几项属性:
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.a"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
我们为其设置了action和category属性,其中action中name的值是我自己定义的,在稍后的Intent的编写上我们也会为其添加action和category属性,只有action和category两项完全匹配时,Intent才能成功跳转到SecondActivity中,下面时Intent的代码编写:
Intent intent=new Intent("com.a");
startActivity(intent);
Intent的构造方法中的参数是我们注册时留下的action的name的值,至于category的值,我们在注册时为其添加了android.intent.category.DEFAULT这条默认值,如果intent中没有声明,则默认category的值为这个值。这样我们再startActivity我们就可以调用启动另一个Activity了
至于传递数据和回馈数据使用方法和显性Intent一样,大家可以自己举一反三的试一试。