我的Android第五章:通过Intent实现活动与活动之间的交互
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" > <Button
android: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 { @Override
protected 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-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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视图文件绑定一个点击事件
@Override
protected 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.实现活动启动之间的交互
@Override
protected 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的内容
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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的按钮点击事件
@Override
protected 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按钮点击事件
@Override
protected 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中获取数据即可
@Override
protected 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 { @Override
protected 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() { @Override
public void onClick(View arg0) {
Intent intent = new Intent();
//设置要返回的值
intent.putExtra("data_return", "我已经返回上一个活动了");
//设置返回结果
setResult(RESULT_OK, intent);
finish();//销毁前执行
}
});
由于我们设置了starActivityForReturn()方法来启动SecondActivity,在SecondActivity被销毁之后会调用一个活动的onActivityResult()方法,所以我要在MainActivity.java中重写
onActivityResult()方法
@Override
protected 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.测试
成功执行
是不是这次讲解的知识点很强大呢?哈哈,这已经实现了像网站中页面与页面之间跳转同时携带数据的效果
我的Android第五章:通过Intent实现活动与活动之间的交互的更多相关文章
- Pro Android 4 第五章 理解Intent
Android引入了一个名为Intent的概念用来唤醒各种组件.Android中的组件包括:activities(UI 组件),services(后台代码),broadcast receiv ...
- 我的Android第五章
今天我们来讲一下Android四大组件中的activity的生命周期, 首先我们可以看一张activity的生命周期的图解看一下 关于Activity的生命周期,有以下几个要注意的点: 1.最开始进入 ...
- 《Linux内核设计与实现》读书笔记 第五章 系统调用
第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...
- Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
- Android深度探索--HAL与驱动开发----第五章读书笔记
第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- Android群英传笔记——第五章:Android Scroll分析
Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...
- Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习
16.7挑战练习:优化照片显示 新建dialog_photo.xml 1234567891011121314 <?xml version="1.0" encoding=&qu ...
- android学习五 Intent
1.Intent是组件间调用的桥梁. 2.Android系统定义了很多Intent http://developer.android.com/guide/components/intents-c ...
随机推荐
- Web APi之控制器选择Action方法过程(九)
前言 前面我们叙述了关于控制器创建的详细过程,在前面完成了对控制器的激活之后,就是根据控制器信息来查找匹配的Action方法,这就是本节要讲的内容.当请求过来时首先经过宿主处理管道然后进入Web AP ...
- C#互斥体——Mutex
Mutex对象是一个同步基元,可以用来做线程间的同步. 若多个线程需要共享一个资源,可以在这些线程中使用Mutex同步基元.当某一个线程占用Mutex对象时,其他也需要占用Mutex的线程将处于挂起状 ...
- SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Department_$$_javassist_0 cannot be cast to javassist.util.proxy
今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- Front End Developer Questions 前端开发人员问题(二)CSS 后续
问题来源:http://markyun.github.io/2015/Front-end-Developer-Questions/ 31.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再 ...
- 探秘Tomcat——连接篇
前两篇我们分别粗线条和细粒度的讲解了tomcat的服务是如何启动以及连接器Connector和容器Container又分别是如何被启动的. 本篇我们主要侧重tomcat中server.service以 ...
- 【JUC】JUC集合框架综述
一.前言 完成了JUC的锁框架的分析后,现在分析JUC集合框架,之前分析过的集合框架,很大程度上都不是线程安全的,其在多线程环境下会出现很多问题,为了保证在多线程环境下仍然能够正确安全的访问集合,出现 ...
- Ajax跨域访问wcf服务中所遇到的问题总结。
工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...
- Android之图片加载框架Fresco基本使用(一)
PS:Fresco这个框架出的有一阵子了,也是现在非常火的一款图片加载框架.听说内部实现的挺牛逼的,虽然自己还没研究原理.不过先学了一下基本的功能,感受了一下这个框架的强大之处.本篇只说一下在xml中 ...
- css3 翻转和旋转的区别
我以前一直以为旋转跟翻转一样,今日自己旋转了好久都发觉跟翻转差一点点,纠结了十几分钟才明白,只能怪自己的立体感太差了. css3中的transform中有旋转,放缩,倾斜,平移的功能,分别对应的属性是 ...