Android基础之Intent

来源:互联网 发布:大专学软件开发 编辑:程序博客网 时间:2024/04/28 20:35

今天主要是学习了Intent的用法以及Activity的生命周期

1、Intent

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

Intent的用法大致可以分为两种,一种是显式Intent,一种是隐示Intent。

(1)显式Intent

使用Intent(Context packageContext,Class<?>cls),其中第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标

活动,通过这个构造函数就可以构造出Intent的“意图”。

具体用法见部分代码:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class)

startActivity(intent)

其中FirstActivity.this作为上下文,即为活动的运行提供一个环境,SecondActivity.class参数表示目标活动

我们的意图就是在FirstActivity这个活动的基础上来打开SecondActivity这个活动。

(2)隐式Intent

它并不明确指出我们要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并帮我们找出合适的活动去启动

所谓的匹配指的是在AndroidManifest.xml中注册的action和category信息和Intent中指定的action和category信息完全一样。

具体用法见部分代码:

androidManifest.xml中的代码

<intent-filter>

<action android:name="com.example.activitytest.ACTION_START" />

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

</inter-filter>

FirstActivity中的代码:

Intent intent=new Intent ("com.example.activitytest.ACTION_START")

startActivity(intent)

由于android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法时候会自动将这个category添加到Intent中去。


注意:每个Intent中只能指定一个action,但是却能指定多个categroy

在上述的FirstActivity中在添加一个category

FirstActivity中的代码:

Intent intent=new Intent ("com.example.activitytest.ACTION_START")

intent.addCategory("com.example.activitytest.MY_CATEGORY")

startActivity(intent)

此时一定要修改以下注册文件,否则程序将无法运行,因为找不到与intent相同的

修改后的androidManifest.xml中的代码

<intent-filter>

<action android:name="com.example.activitytest.ACTION_START" />

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

<category android:name="com.example.activitytest.MY_CATEGORY" />

</inter-filter>

注意:保险起见,还是将默认的category保留。

更多的隐示Intent方法主要是修改intent的参数,这里就不一一列举了。

2.在活动中传递数据

(1)向下一个活动传送数据

使用Intent提供给我们的putExtra()方法的重载,可以将数据暂时保存在Intent中,启动了另一个活动,只需

要再将数据从Intent中取出就可以了。

FirstActivity中的部分代码:

String data="Hello SecondActivity"

Intent intent=new Intent (FirstActivity.this,SecondActivity.class)

intent.putExtra("extra_data,data")

startActivity(intent);

这里采用显式Intent的方式来启动SecondActivity,并通过putExtra()方法传递了一个字符串。注意putExtra()方法中一个是键值,一个是真正的数值

SecondActivity中的部分代码

Intent intent=getIntent() 

String data=intent.getStringExtra("extra_data")

Log.d("secondActivity",data);

首先通过getIntent()方法获取到用于启动SecondActivity的Intent,然后调用getStringExtra方传入相应的键值,就可以得到启动该活动的活动向Intent中存入的数据了。

(2)返回数据给上一个活动

1>Activity中有一个startActivityForResult()方法用于启动活动,但是这个方法期望在活动被销毁的时候能够返回数据给上一个活动。

FirstActivity中的部分代码:

Intent intent =new Intent (FirstActivity.this,SecondActivity.class)

startActivityForResult(intent,1)

这段代码就是说当SecondActivity活动被销毁的时候,会返回数据给上一个活动,也就是说启动该活动的活动,及是FirstActicity

其中startActivityForResult()中的第一个参数是intent,第二个参数是请求码,请求码只要是唯一值就可以了。

2>在SecondActivity中添加返回数据的逻辑

Intent intent =new Intent();

intent.putExtra("data_return","Hello FirstActivity")

setResult(RESULT_OK,intent)

finish();

在这段代码中的intent只是起到了存储以及传递数据的作用,因为使用的是startActivityForResult期望返回数据,所以必须定义数据逻辑

setResult()方法非常重要,是用于向上一个活动返回数据的,第一个参数一般都只是使用RESULT_OK,第二个参数把带有数据的Intent传递回去。

3>在FirstActivity中重写onActivityResult()方法来获得返回的数据

protected void onActivityResult(int requestCode,int resultCode,Intent data)

{

switch(requestCode){

case 1:

if(resultCode==RESULT_OK)

{

String returndData=data.getStringExtra("data_return")

Log.d("FirstActivity",returndata)

}

break;

}

}

其中onActivityresult方法有三个参数,第一个参数是请求码,即我们在启动活动时传入的请求码。

第二个是我们在返回数据是时传入的处理结果,第三个参数是返回数据的Intent。

3.活动的生命周期

记住:onCreate onStart onResume onPause omStop onDestroy onRestart等七个生存期

今天到此为止,明天进行UI的代码实践。

最后,送给自己一句话:行胜于言!!!加油!!! 


1 0
原创粉丝点击