Intent在活动的操作

作用:

     Itent是Android程序中各个组件直接交换的一个重要方式可以指定当前组件要执行任务同时也可以给各个组件直接进行数据交互
              同时Intent启动往往可以启动活动,启动服务,以及发送广播等场景

分类

1.显示Intent和隐示Intent

显示Intent操作

1.首先我们新建一个Android工程

在分别讲解显示意图和隐示意图时我们要在rec目录 -layout资源新建活动 。

然后右键点击新建一个activity_second.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" ><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button2" />
</LinearLayout>

2.新建一个活动

在我们添加完按钮组件之后同时给按钮取个名字叫button2和唯一id名,然后在src 目录工程包下新建一个活动SecondActivity继承Activity类让其成为活动类

然后重写onCreate()方法,同时给该活动设置上下文布局文件

package com.example.intentdome;import android.app.Activity;
import android.os.Bundle;public class SecondActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);//读取我们刚才在layout资源文件新建的布局文件}}

3.然后在AndroidManifest.xml工程配置文件中注册一个活动

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.intentdome"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="17"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity> <activity android:name=".SecondActivity"></activity></application></manifest>

以上步骤已经操作完毕,那我们开始下一步操作

给按钮绑定事件

1.给定MainActivit视图文件绑定一个点击事件

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取按钮对象Button btn1 = (Button)findViewById(R.id.button1);//给该按钮绑定一个监听事件btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {}});}

  2.创建意图对象

 Intent的构该类有多个构造函数其中一个Intent(Context packageCntext,Class<?> cls)第一个参数:指定要启动的上下文第二个参数:指定要启动的目标活动

//获取一个意图对象
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);

3.实现活动启动之间的交互

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取按钮对象Button btn1 = (Button)findViewById(R.id.button1);//给该按钮绑定一个监听事件btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {//获取一个意图对象//实现活动与活动直接的交互Intent intent = new Intent(MainActivity.this,SecondActivity.class);//调用启动活动操作
                startActivity(intent);}});}

        

隐示Intent操作

特点:隐示它并不明确表面指出我们要启动那个活动,而是抽象的指定一系列action和category等信息

1.实现隐示操作:打开AndroidManifest.xml文件重新编写activity的内容

    <applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".SecondActivity"><intent-filter ><action android:name="com.example.intentdome.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/></intent-filter></activity></application>

2.重新编写MainActivity.java的按钮点击事件

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取按钮对象Button btn1 = (Button)findViewById(R.id.button1);//给该按钮绑定一个监听事件btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {/*    //获取一个意图对象//实现活动与活动直接的交互Intent intent = new Intent(MainActivity.this,SecondActivity.class);//调用启动活动操作startActivity(intent);*/Intent intent = new Intent("com.example.intentdome.ACTION_START");startActivity(intent);}});}

3.运行:输出同样的结果

使用隐示启动其他程序内部活动

其实隐示不仅仅可以启动自己程序的活动,还可以启动其他程序的活动,使得Android多个应用共享成为了可以,这样程序与程序直接进行数据交换,这样就不用我们而外编写其他程序活动来操作了

以下一个案例展示通过自己本程序去调用系统的浏览器来打开一个博客的网页操作

1.重新编写MainActivity.java按钮点击事件

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取按钮对象Button btn1 = (Button)findViewById(R.id.button1);//给该按钮绑定一个监听事件btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.cnblogs.com/xiaotaojing/"));startActivity(intent);}});}

 以上是Intent中通过Intent来启动一个活动操作,其实Intent会可以活动与活动直接进行数据交互和传递,那然我们来看看是怎么样的一个过程吧

Intent实现活动中数据的传递

设置数据

Intetn提供了一个putExtra()方法用于以键-值对的形式进行数据的存放,相当与Serlet的作用域对象setAttibute()方法,puExtra()方法提供了方法重载,将传递的数据暂存在Intent中

启动一个活动到另一个活动时,只需要在重Intent中获取数据即可

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取按钮对象Button btn1 = (Button)findViewById(R.id.button1);//给该按钮绑定一个监听事件btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("data", "Hello SecondActivity");startActivity(intent);}});}

    获取数据

可以通过getStringExtra()方法获取存放的数据

Intent.getStringExtra(设值的参数名)

然后在ScondActivity.java中编写如下代码

package com.example.intentdome;import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;public class SecondActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);//通过提示框来显示数据Toast.makeText(this, getIntent().getStringExtra("data"), Toast.LENGTH_SHORT).show();}}

   运行测试

             

携带数据返回上一个活动

既然讲到了一个活动可以给下一个活动传递数据,那可以返回数据为上一个活动呢? 其实是可以的,当你点返回键时不是可以返回上一个活动了吗?哈哈,那只是返回并没有携带数据一起返回

怎样做才可以重一个活动返回上一个活动呢?还可以携带数据,其实我们需要用到一个方法就是startActivityForResulte() 其中该方法有两个参数

第一个参数  :Intent对象、第二个参数:请求的结果码.

 btn1.setOnClickListener(new OnClickListener() {@Override//当鼠标点击操作事着触发该操作public void onClick(View v) {Intent intent = new Intent(MainActivity.this,SecondActivity.class);startActivityForResult(intent, 1);}
});

    第二在SecondActivity.java中编写如下代码

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Button btn2 = (Button)findViewById(R.id.button2);btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent = new Intent();//设置要返回的值intent.putExtra("data_return", "我已经返回上一个活动了");//设置返回结果setResult(RESULT_OK, intent);finish();//销毁前执行}
});

  由于我们设置了starActivityForReturn()方法来启动SecondActivity,在SecondActivity被销毁之后会调用一个活动的onActivityResult()方法,所以我要在MainActivity.java中重写

onActivityResult()方法

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case 1:if(resultCode==RESULT_OK){Toast.makeText(this, data.getStringExtra("data_return"),Toast.LENGTH_SHORT).show() ;}break;default:break;}}

  3.测试

                  

成功执行

是不是这次讲解的知识点很强大呢?哈哈,这已经实现了像网站中页面与页面之间跳转同时携带数据的效果

转载于:https://www.cnblogs.com/xiaotaojing/p/6080877.html

我的Android第五章:通过Intent实现活动与活动之间的交互相关推荐

  1. Android 第五章 TextView

    android:id="@+id/xx"控件标识.标签.ID android:layout_margin="10dp" 子控件与父控件之间距离10dp andr ...

  2. Android技巧:003使用Intent连接多个活动

    Intent 是 Android 各组件之间进行交互的一种重要方式,一般被用于启动活动.启动服务以及发送广播等场景. 显式 Intent: Intent 有多个构造函数重载,其中一个 Intent(C ...

  3. 浅入浅出 Android 安全:第五章 Android 应用层安全

    第五章 Android 应用层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 虽然在这一节中我们描述了应用层的安全性, ...

  4. Android深度探索(卷1)HAL与驱动开发第五章总结

    开发板是开发和学习嵌入式技术的主要硬件设备,开发板的型号和种类很多,目前流行的是基于S3C6410 ARM11架构的开发板,S3C6410是由三星公司推出的一款低功耗,高性价比的RISC处理器,它基于 ...

  5. Android 渗透测试学习手册 第五章 Android 取证

    第五章 Android 取证 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 5.1 取证类型 取证是使用不同的手动和自动方法从设备中提取和分析数据.它可以大致分为两 ...

  6. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

  7. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  8. Pro Android 4 第一章 Android 开发平台介绍

    当今这个时代,计算比以往任何一个时代都距离人们更近.各种手持设备已经变身为计算平台.无论是平板和是手机,移动设备凭借其强大的通用计算能力,已经成为真正意义上的个人电脑(PC).所有的传统计算机厂商已经 ...

  9. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  10. 《Android 应用案例开发大全(第二版)》——6.1节Android系统的信使:Intent

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第6章,第6.1节Android系统的信使:Intent ,作者李宁,更多章节内容可以访问云栖社区"异步 ...

最新文章

  1. 隐藏SyntaxHighlighter滚动条
  2. 读书笔记_Effective_C++_条款十九:设计class犹如设计type
  3. 升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏
  4. SNMPWALK命令解析
  5. php ci CodeIgniter框架图片缩略图处理类优化 缩放到固定大小
  6. 让你更值钱的方法:培养稀缺
  7. PRD(Product Requirement Document,产品需求文档)模板
  8. 解决Failed to connect to github.com port 443 after 21113 ms: Timed out
  9. Python爬虫—爬取小说名著
  10. 特殊手段恢复被truncate的表
  11. iOS9.3.5越狱图文教程
  12. xctf攻防世界pwn基础题解(新手食用)
  13. Zcash halo2 背后技术衍化介绍
  14. IntelliJ IDEA 安装和使用
  15. 易饭原创:小易U盘安装ghost版xp完美解决方案(解决启动U盘制作难题)09.2.27更新
  16. 小白写了一堆if-else,大神实在看不下去了,竟然用策略模式直接摆平了
  17. 【今日插件】在 WindowMobile 上的模拟LED 显示屏插件
  18. latex编译中遇到的错误
  19. 安装APK时显示“已安装了签名冲突的应用”,但是手机上又没有该软件的解决办法
  20. 测试-开发的恩怨情仇

热门文章

  1. 一些 NSArray 的基本操作代码例子
  2. 28th Dec, 2012 我自己的问题
  3. linux内核之中断和异常
  4. java 释放锁,在Java中以原子方式释放多个锁
  5. DM9000驱动之接受
  6. 队列queue中的常用函数
  7. android gms包找不到,错误:包com.google.android.gms.appstate不存在
  8. echart 地图 某个地区_「省份」Echart系列 | 绘制世界地图含中国各个省份(地图篇)(一) - seo实验室...
  9. 共轭梯度法(Conjugate gradient)详解
  10. pandas读取与存储操作详解