野人学Android基础篇之四大组件第一课--Activity的Intent传递
来源:互联网 发布:sql if两个判断 编辑:程序博客网 时间:2024/05/22 02:16
在web编程中,get和post充当html之间的信使。那么在Android中谁充当Activity的“信使”呢?答案是Intent!
那Intent如何使用呢?按照目的不同,分成三种方式:
1.无参数传递
2.参数传递
3.返回传递
一、无参数传递
这种传递方式有点像web编程中的网页跳转,从一个页面转到另一个页面,不带一个参数。原理图如下:
从这个原理图中可以看出,从A页面跳转到B页面的时候,A页面会调用startActivity()方法,就能传送到B页面了。来点代码,更加直观。
Intent intent = new Intent(this, B.class);startActivity(intent);
来简单解释下Intent的参数,第一个是上下文,第二个是目标class,就是你要跳转到的Activity。当实例化Intent之后,直接调用startActivity(intent),就Ok了!
二、参数传递
如果Intent传递不能携带参数,那不是太逊了。那我们来了解下Intent是怎么携带参数传递的吧。
如图所示,首先我们要在A页面给Intent绑定数据,用的是putExtras()方法。然后就可以调用startActivity()方法,使用方法和上面的一致。接着在B页面中接收Intent,可以直接用getIntent()方法,赋值给Intent。那接下来我们就要从Intent中抠出数据,就直接用getExtras()方法,这样就能获取A页面传递过来的参数,至于这个参数你想怎么用,那就看你喽。
A Activity的代码:
Intent intent = new Intent(this, B.class);//实例化IntentBundle bundle = new Bundle();//实例化Bundlebundle.putString("name","野人");//给Bundle赋值intent.putExtras(bundle);//将Bundle类赋值给IntentstartActivity(intent);//启动传递
B Activity的代码:
Intent intent = getIntent();//获取IntentBundle bundle = intent.getExtras();//获取BundleString name = bundle.getString("name");//获取name值
这里的Bundle类是上一篇博客中讲到的,有不懂的可以参考我上一篇博客。好了,有了这些核心代码,赶快去试试效果吧。
三、返回传递
这个传递是最复杂的一个,因为不仅要从A传递参数给B,并且B还要返回参数给A。听起来是不是有点高大上,那先来看下原理图吧。
在A页面中给Intent绑定数据的那段我就不讲了,讲一下不一样的。因为要从B中得到返回值,启动传递的方法也不一样,这次是startActivityForResult(),如果有点英语基础的,因为能明白这个方法的字面意思。除了启动这个方法,还要重写一个方法,在返回的时候被调用,就是onActivityResult()。然后就是在B页面中进行编写,获取A传递过来的参数的方法还是和前面的一样,就是在返回给A页面的时候,调用了setResult(),其他的没有什么不同。
A Activity的代码:
Intent intent = new Intent(this, B.class);Bundle bundle = new Bundle();bundle.putString("name","野人");intent.putExtras(bundle);startActivityForResult(intent,resquestCode);@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode==REQUEST_CODE){<span style="white-space:pre"></span>if(resultCode==RESULT_CANCELED)<span style="white-space:pre"></span>setTitle("cancle");<span style="white-space:pre"></span>else if (resultCode==RESULT_OK) {<span style="white-space:pre"></span>String temp=null; Bundle bundle=data.getExtras(); if(bundle!=null){ temp=bundle.getString("name"); tv.setText(temp); } }}else{ Toast.makeText(this, "dd"+requestCode, Toast.LENGTH_SHORT).show(); }}
在Android文档中,对于resquestCode的解释是“If >= 0, this code will be returned in onActivityResult() when the activity exits.”,翻译过来就是“如果resquestCode的值大于等于0,那么当activity存在的时候,这个参数就会在onActivityResult()方法中返回”。ok,如果有兴趣的话,大家可以通过调试requestCode的大小来验证下这句话对不对。
B Activity的代码:
Bundle bundle = getIntent().getExtras();name = bundle.getString("name");Intent intent = getIntent();bundle2.putString("name", "Hello,这是从SecondActivity传来的消息!");it.putExtras(bundle2);setResult(RESULT_OK, intent);//返回带有参数的intent给A
setResult的第一个参数分别由三个常量可供选择,RESULT_OK(对应的int是-1,指结果正常)、RESULT_CANCELED(对应的int是0,指结果取消)、RESULT_FIRST_USER(对应的int是1,指第一次接触)。有了这些核心代码,相信你能很快实现多个Activity之间的intent传递效果。
百变不离其宗。不管以后的开发有多复杂,都是建立在这些基础之上。希望大家能多多练习,带着疑问去练习,在练习中找到答案。本来还想讲一下多个Activity交互对生命周期的影响,但是我想,大家自己去发现结果的快乐,远比我直接告诉大家结果所带来的快乐更大。四大组件还有三个,我暂时不准备讲了,以后有机会会补上的。本系列还有三节内容,异步任务、数据存储、网络通讯,都是硬骨头!
写于2015年9月5日
- 野人学Android基础篇之四大组件第一课--Activity的Intent传递
- 野人学Android基础篇之四大组件第一课--Activity的生命周期
- 野人学Android基础篇之数据存储第一课--SQLite的使用及注意点
- 野人学Android基础篇之网络通讯第一课--HttpUrlConnection的使用
- Android 四大核心组件之Activity--Intent数据传递
- 野人学Android基础篇之HelloWorld程序第一课--程序目录介绍
- 野人学Android基础篇之初探UI控件第一课--TextView静态赋值
- 野人学Android基础篇之初探UI控件第一课--TextView动态赋值
- 野人学Android基础篇之异步任务第一课--AsyncTask原理简介及例子
- 野人学Android基础篇之网络通讯第二课--本地apache服务器与Android的连接
- [Android知识体系]之四大组件:activity(序列化和intent传递对象)
- Android四大组件之Activity篇(一)(Activity的创建、开启和数据传递)
- 野人学Android基础篇之HelloWorld程序第二课--Manifest.xml的不完全解释
- Android基础之四大组件---Activity
- 4.Android基础:四大组件之----->Activity
- Android四大组件之Activity--基础
- Android基础—四大组件之Activity
- Android核心基础-8.Android四大组件之Activity-2.关闭、传递数据
- 命运永远都掌握在我们自己的手中
- JavaScript四种跨域方式详解
- 黑马程序员java之网络通讯
- hdu 2577 dp
- 第10章 信号
- 野人学Android基础篇之四大组件第一课--Activity的Intent传递
- 条款17 以独立语句将new对象置入智能指针
- 《剑指Offer》面试题:合并两个排序的链表
- quick-cocos2d-x数据存储之GameState
- 8583报文解析
- 联考1day1总结
- [C++11/14] 自动类型推导——auto
- poj 3415
- 纯CSS气泡框实现方法探究