Android Intent使用
来源:互联网 发布:淘宝买二手吉他靠谱吗 编辑:程序博客网 时间:2024/05/19 22:25
在文章Android Activity活动探究中,我们介绍了如何创建一个Activity,在一个application中,只有一主活动,如何由主活动跳转到其他活动?主活动与其他活动如何进行交互?本文进行介绍,使用Intent可以实现。
1、什么是Intent
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过使用Intent,程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。
2、显式Intent
显式Intent指定了组件属性的Intent,通过指定具体的组件类。示例如下,我们根据文章Android Activity活动探究,继续添加如下代码。
(1)新建布局文件activity2_my.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="myButton2" /></LinearLayout>在该布局中添加一个按钮Button,显示名称为“myButton2”。
(2)创建活动类MyActivity2.java
package com.yy.testactivity;import android.app.Activity;import android.os.Bundle;import android.view.Window;public class MyActivity2 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);//加载自定义布局文件 activity2_my.xmlsetContentView(R.layout.activity2_my);}}(3)注册活动MyActivity2
修改application配置文件AndroidManifest.xml文件,注册上述活动,如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yy.testactivity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- register activity --> <activity android:name=".MyActivity" android:label="This is MyAcitivity Label" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- register activity MyActivity2 --> <activity android:name=".MyActivity2" > </activity> </application></manifest>MyActivity2不是主活动,不需要配置intend-filter。
(4)测试显示Intent
场景:在MyActivity中点击Button 跳转到第二个活动MyActivity2。因此修改MyActivity中按钮的点击事件,代码如下:
//监听点击事件button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {//跳转到活动MyActivity2//第一个参数:上下文,第二个参数:目标活动类Intent intent = new Intent(MyActivity.this,MyActivity2.class);//启动活动startActivity(intent);}});(5)查看效果
重新运行程序,当点击主活动界面上的按钮时,出现如下结果:
说明已经成功启动了第二个活动了,返回主活动,按下Back键即可。
3、隐式Intent
隐式Intent指的是没有指定组件属性的Intent,需要需要根据Intent提供的信息确定是何组件。
(1)修改AndroidManifest.xml
修改第二个活动MyActivity2的配置信息,添加filter:
<!-- register activity MyActivity2 --> <activity android:name=".MyActivity2" > <intent-filter> <action android:name="com.yy.testactivity.MyActivity2.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>(2)修改MyActivity.java
修改按钮的点击事件,使用隐式Intent。代码如下:
//监听点击事件button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {//跳转到活动MyActivity2//第一个参数:上下文,第二个参数:目标活动类//Intent intent = new Intent(MyActivity.this,MyActivity2.class); //显式IntentIntent intent = new Intent("com.yy.testactivity.MyActivity2.ACTION_START");//隐式Intent//启动活动startActivity(intent);}});在Intent的构造函数中,我们指定了想要启动的Activity,而该活动在主配置文件中MyActivity2的配置中已经进行了配置。java程序中没有指定category,就使用了配置中的默认category。
一个Intent只能配置一个Action,但能配置多个category。可以通过Intend的addCategory方法进行添加category,同时在配置文件中进行配置。
(3)结果
点击主活动按钮,同样启动了第二个活动。
4、Android内置的Action
Android内置了很多Action,比如ACTION_VIEW:数据显示,ACTION_DIAL:拨打电话等。下面是使用内置的action,当点击按钮时,跳转到百度页面。
(1)修改MyActivity.java
修改按钮点击事件,如下:
//监听点击事件button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {//跳转到活动MyActivity2//第一个参数:上下文,第二个参数:目标活动类//Intent intent = new Intent(MyActivity.this,MyActivity2.class); //显式Intent//Intent intent = new Intent("com.yy.testactivity.MyActivity2.ACTION_START");//隐式Intent//intent.addCategory("com.yy.testactivity.MY_CATEGORY");Intent intent = new Intent(Intent.ACTION_VIEW); //内置Actionintent.setData(Uri.parse("http://www.baidu.com"));//跳转到页面//启动活动startActivity(intent);}});(2)结果
当点击主活动的按钮时,显示如下界面:
5、活动间数据传递
Intent可以在活动启动的时候进行数据传递,比如主活动可以向其他活动传递,其他活动也可以返回数据给主活动。
(1)向下一个活动传递数据
修改活动MyActivity.java中onCreate方法中按钮的点击监听事件,如下:
//监听点击事件button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {//跳转到活动MyActivity2//第一个参数:上下文,第二个参数:目标活动类Intent intent = new Intent(MyActivity.this,MyActivity2.class); //显式Intent//向活动MyActivity2传递数据intent.putExtra("info", "我来自活动1");//启动活动startActivity(intent);}});即使用Intent的putExtra方法传递数据,其中第一个参数是key,第二个参数是value。
目标活动MyActivity2接受来自MyActivity的数据,修改MyActivity2.java,修改onCreate方法,如下:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);//加载自定义布局文件 activity2_my.xmlsetContentView(R.layout.activity2_my);//接受活动1传递来的数据Intent intent = getIntent();String info = intent.getStringExtra("info");Toast.makeText(getApplicationContext(), info, Toast.LENGTH_SHORT).show();}即使用Intent的getXXXExtra方法接受传递来的数据,其中XXX根据传递的数据类型进行确定的。
当点击主活动的button时,显示如下:
(2)返回数据给上一个活动
数据可以传递给下一个活动,同样可以返回给上一个活动。使用startActivityForResult方法。过程如下:
修改主活动MyActivity的方法onCreate,如下:
//监听点击事件button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {//跳转到活动MyActivity2//第一个参数:上下文,第二个参数:目标活动类Intent intent = new Intent(MyActivity.this,MyActivity2.class); //显式Intent//向活动MyActivity2传递数据intent.putExtra("info", "我来自活动1");//启动活动//startActivity(intent);startActivityForResult(intent, 0);}});当传递到活动MyActivity2中,修改其onCreate方法,如下:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);//加载自定义布局文件 activity2_my.xmlsetContentView(R.layout.activity2_my);//接受活动1传递来的数据Intent intent = getIntent();String info = intent.getStringExtra("info");Toast.makeText(getApplicationContext(), info, Toast.LENGTH_SHORT).show();Button button2 = (Button) findViewById(R.id.button2);button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//构建一个Intent 返还数据Intent intent2 = new Intent();intent2.putExtra("feedBack", "我来自活动2,我已经收到了你的信息,这是我给你的反馈!");setResult(RESULT_OK, intent2); //返还数据finish();//销毁当前活动}});}即获取主活动传递来的数据,使用Toast显示,并且为Button2添加点击监听事件:创建一个Intent,回传数据给主活动,同时销毁当前活动。使用setResult方法回传数据。
需要注意的是,用户按下back时也可以返回,因此在活动MyActivity2中还需要重写onBackPressed方法,如下:
/** * 用户按钮back键返回数据 * */@Overridepublic void onBackPressed() {//构建一个Intent 返还数据Intent intent2 = new Intent();intent2.putExtra("feedBack", "我来自活动2,我已经收到了你的信息,这是我给你的反馈!");setResult(RESULT_OK, intent2); //返还数据finish();//销毁当前活动}
当数据回传后,主活动MyActivity中需要重写方法onActivityResult进行数据的接受,重新MyActivity.java中onActivityResult方法,如下:
/** * 接受活动返回的数据,该方法对应于startActivityForResult(intent, 0)方法 * requestCode:请求码 * resultCode:返回数据时的处理结果 * data:返回数据的Intent */@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//进行判断if(0 == requestCode && resultCode == RESULT_OK){//获取数据String feedBack = data.getStringExtra("feedBack");Toast.makeText(getApplicationContext(), feedBack, Toast.LENGTH_SHORT).show();}}这样就完成了整个传递及回传过程。
测试:向下传递数据我们上面已经测试过,在这里我们测试回传数据,当点击活动MyActivity2中的按钮时,显示如下:
说明主活动MyActivity获取到了返还数据。
总结:本文介绍了Intent的使用,比如在活动中调用方式、活动间的数据传递等内容。
- Android Intent 使用整理
- Android Intent 使用整理
- Android Intent 使用整理
- Android Intent使用
- android 中Intent 使用
- Android Intent使用
- android Intent 使用 小记
- Android Intent 使用整理
- Android Intent 使用整理
- android intent使用
- Android Intent组件使用
- Android学习 - Intent使用
- android---Intent的使用
- android Intent.ACTION使用
- Android Intent组件使用
- Android Intent组件使用
- Android Intent组件使用
- Android Intent使用
- 【数据库视频】耿建玲VS自考
- poj-3368 Frequent values 线段树
- uva 12260 Free Goodies DP+一点点贪心
- 为PHP摇旗呐喊!
- oc类命名规范
- Android Intent使用
- 项目团队提高企业软件质量的N种手段
- Servlet+监听器+注解+EL表达式
- iOS随机数的生成
- 粒子滤波(PF:Particle Filter与卡尔曼滤波(Kalman Filter)相比较 (转载)
- 《Programming in Lua 3》读书笔记(十五)
- android 多线程断点续传下载 三
- LeetCode | Jump Game(跳远游戏)
- poj1789Truck History(最小生成树prim算法)