android中使用intent来实现Activity带数据跳转
大家都知道startActivity()是用来切换跳转Activity的、如果想要在另个Activity中出书数据的话、只需要在源activity中使用intent.putExtra()方法传出数据、在对应activity中使用intent.get**Extra()方法接收数据就行了
那么startActivityForResult()方法呢、它也是用来带数据跳转activity的、可是这两个方法具体有什么区别呢?
这就要说说带数据跳转的方向了、
第一个方法只能把数据发送过去、可是如果子activity需要再传送回一些数据呢?
你可能会说、在子activity中使用intent.putExtra()方法把数据写入、在父activity中写入get*方法就行了嘛、
可是、你想过没有这个父activity中的get方法要写在哪儿呢?
我想、你当然会说要想在activity一启动就获取数据、所以当然要写在onCreate方法中、
那么问题就来了、如果你在父activity中的onCreate方法中写入了get*方法来读取(获得)数据、
那么就意味着你一启动父activity就会执行get*方法(因为第一个执行的方法就是onCreate)、而父activity是主方法、它必定是程序第一个执行的activity、
也就是说、此时还没有执行子activity、也就没有数据通过intent传过来、所以在执行onCreate时、执行到get*方法时就会读不到任何数据、
而且还会在每次启动activity时、不管需不需要从子activity接受数据都多此一举的执行一遍get*方法、来获取数据、
这样虽然可以实现从子activity中得到返回的数据、但却是不理想的、不正确的、丝毫没有逻辑性的
那么到底该怎么让父activity获取到从子activity传回的数据呢?
这就是第二个方法:startActivityFoResult()方法的作用了
下面具体说说这个方法是怎么实现把子activity传回的数据读取过来的
先看看这个方法的参数:startActibityForResult(Intent intent,int requestCode)
发现第一个参数是Intent类型、这个就不必多说了、看看第二个int型的、看字义是“请求码”、其实作用也就是请求码、这个具体在下面说、
只要你使用了startActivityFoResult()、那么就要在这个类中添加一个onActivityResult(int requestCode ,int resultCode ,Intent intent)这个方法、
你可以称它为:回调方法(子activity回调父activity的方法)、
当然你也可以不添加(或方法体为空)、那也就代表你不需要对子activity传回的数据进行操作、
反之如果你要想对子activity传回的数据进行操作、那么把方法体写在这个方法中即可、
这个方法如同onCreate()一样是这个类的成员方法、也就是说这个方法不在onCreate方法中(这样就避免了一启动这个activity就执行get*方法)、
这个方法有什么用呢、你可以理解为它是用来监视子activity的方法、只要子activity一结束(调用了finish()方法)、它就会被执行、这样就实现了“回调”这一功能
下面看看这个方法的参数:
int requestCode:与startActibityForResult(Intent intent,int requestCode)方法中的int requestCode参数对应、可以理解为请求码
int resultCode:见名知意、结果码、这个是在子activity中设置的
Intent intent:这个就不必多说了
接着我们来看看这几个参数的具体作用、
1)int requestCode、请求码、它与父activity中的startActibityForResult(Intent intent,int requestCode)方法中的int requestCode参数对应、
用它来判断是从父activity中哪个组件请求进入子activity的、因为父activity中可能有多个按钮或其他组件都可以发出进入新的子activity的请求、
而onActivityResult()方法在父activity中只有一个、所以就可以(需要)来标记清楚
2)int resultCode、结果码、它也是起到标记的作用、它与子activity中使用setResult(int resultCode,Intent intent)方法来设置的resultCode参数对应、
那么它的作用也就和子activity有关、用它可以来判断是哪个子activity在结束后来回调这个回调方法的、因为父activity可能需要跳转到多个不同的子activity
而onActivityResult()方法在父activity中只有一个、所以就可以(需要)来标记清楚
3)Intent intent、请求执行回调方法的intent
大体都说完了、下面给出一个java代码来直观的看一下
//父activity核心代码:
Button button1=(Button)findViewById(R.id.button1);
Button button2=(Button)findViewById(R.id.button2); //onCreate核心代码:
onCreate(){
//为按钮1设置监听,放入名为data1的数据100,设置请求吗为1
button1.setOnClickListener(new View.OnClickListener(){
onClick(){
Intent intent1=new Intent();
intent.setClass(this, one.class);
intent.putExtra("data1", "100");
startActivityForResult(intent , 1);
}
} //为按钮2设置监听,放入名为data2的数据200,设置请求吗为2
button2.setOnClickListener(new View.OnClickListener(){
onClick(){
Intent intent2=new Intent();
intent.setClass(this, two.class);
intent.putExtra("data2", "200");
startActivityForResult(intent , 2);
}
}
} //回调方法
onActivityResult(int requestCode, int resultCode, Intent intent){
super.onActivityResult(requestCode, resultCode, intent);
switch(requestCode){//判断父activity中的哪个按钮
case 1://如果是按钮1 }
case 2://如果是按钮2 }
}
switch(resultCode){//判断是哪个子activity
case 1://如果是子activity1 }
case 2://如果是子activity2 }
} //******************************************************************
//子activity1:one.java核心代码 Button button1=(Button)findViewById(R.id.button1); onCreate(){
//为按钮1设置监听,设置结果吗为1
button1.setOnClickListener(new View.OnClickListener(){
onClick(){
setResult(1,intent);
finish();
}
} //*********************************************************************
//子activity2:two.java核心代码 Button button1=(Button)findViewById(R.id.button1); onCreate(){
//为按钮1设置监听,设置结果吗为2
button1.setOnClickListener(new View.OnClickListener(){
onClick(){
setResult(,intent);
finish();
}
}
好累啊。。
代码是直接写的、某些无关紧要的问题请忽略。。
以后还是在eclipse中写好代码粘过来吧。。
今天这些就说完了、
android中使用intent来实现Activity带数据跳转的更多相关文章
- Android中的intent属性
android之Intent的七大属性 2015年04月03日 ⁄ Android ⁄ 共 14866字 ⁄ 字号 小 中 大 ⁄ 1条评论 Intent用于封装程序的“调用意图”.两个Activit ...
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片 Android6.0中把Apache HTTP Client全部的包与类都标记为deprecated ...
- android中使用Intent在activity之间传递数据
android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...
- Android中的Intent Filter匹配规则介绍
本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...
- Android中的Intent详解
前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activi ...
- android中最先被执行的activity
像C.C++.JAVA都有一个主函数作为程序的入口点,但是Android中并没有一个明确的主窗口,那么在有多个Activity的情况下,最先被执行的是哪个呢?这完全取决于配置文件AndroidMain ...
- Android中目的地Intent的使用
一.什么是Intent? Intent的中文意思是目的.在Android中也是“目的”的意思.就是我们要去哪里,从这个activity要前往另一个Activity就需要用到Intent. 示例代码一: ...
- android中的返回键与Activity
我在做应用时遇到一个问题.就是在启动主页面时须要预先载入一些数据.我是在一个载入页中处理完这些数据然后再转到主页面.但当我在主页面中按返回键时,系统会返回载入页面.我不希望载入页在使用完之 ...
- Android中Service与多个Activity通信
由于项目需要,我们有时候需要在service中处理耗时操作,然后将结果发送给activity以更新状态.通常情况下,我们只需要在一个service与一个activity之间通信,通常这种情况下,我们使 ...
随机推荐
- 【Android - 框架】之Fresco的使用
当下有很多图片加载框架,常见的有Glide.Fresco.Picasso等.Glide因为其体积小.缓存机制强大等优点,受到了广大程序员的青睐:Fresco虽然体积比较大,缓存机制也没有Glide强大 ...
- toString&&equals方法
toString&&equals方法 先来看看这个题该怎样做? 分析: 1.java里的三大特性,有封装,继承,多态(方法的重载),super,this等关键字 2.常用的方法,equ ...
- 6 Java学习之 枚举
1. 概念 枚举是一种规范,它规范了参数的形式,这样就可以不用考虑类型的不匹配,并且显示的替代了int型参数可能带来的模糊概念. 常用来定义一个final类型的变量(常量),保证输入安全.如 ...
- 用网页server实现钢琴弹奏(使用Wizwiki-W7500)
我将为大家介绍一个能够弹钢琴的网页server. 你仅仅须要打开网页,跟着以下步骤,用这个WIZwiki-W7500项目,就能轻松实现用网页server弹钢琴. 很easy. 我们開始吧! 第 ...
- shuffle() 函数(转)
定义和用法 shuffle() 函数把数组中的元素按随机顺序重新排列. 若成功,则返回 TRUE,否则返回 FALSE. 注释:本函数为数组中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序. ...
- [转] Mac OX上安装MongoDb
https://scotch.io/tutorials/an-introduction-to-mongodb MongoDB的安装有好多种安装方法,有普通青年的HomeBrew方式,也有文艺青年的源码 ...
- AndroidStudio工程文件导入Jar包和So第三方库
AndroidStudio 导入Jar包和第三方So库 在android开发中,需要导入许多第三方的jar包和so库来支持,包括像许多第三方的支持平台--友盟,环信.融云.极光推送.微博.腾讯等第三方 ...
- SQL 优化,全
性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...
- jQuery 删除元素
通过 jQuery,可以很容易地删除已有的 HTML 元素. 删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty ...
- 输出内容(document.write)
document.write() 直接在页面中输出内容 第一种 直接输出 document.write("I Love Javascript !") //输出内容为:I Love ...