Android学习笔记(五)
Intent不仅用来启动一个活动,Intent还可以在启动活动的时候传递参数。
1.向下一个活动传递数据
启动活动的时候传递数据,Intent提供了一系列putExtra()方法的重载,可以把要传递的数据暂存在Intent中,启动了另一个活动后,
只需要把这些数据再从Intent中取出就可以了。
例如FirstActivity中有一个字符串,现在把这个字符串传递到SecondActivity中,代码如下:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String data = "Hello SecondActivity"; Intent intent = new Intent(FirstActivity.this,SecondActivity.class); intent.putExtra("extra_data", data); startActivity(intent); } });
上面的代码中用显示Intent方式来启动SecondActivity,然后通过putExtra()方法传递了一个字符串。
putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数是真正要传递的数据。
然后在SecondActivity中将传递的参数取出,并打印出来,代码如下:
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); Log.d("SecondActivity", data); }
上述的代码中,通过getIntent()方法获取到用于启动SecondActivity的Intent,通过getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。
注意:传递字符串用getStringExtra(); 整型数据用getIntExtra();传递布尔型数据用getBooleanExtra()。
2.返回数据给上一个活动
Activity中有一个startActivityForResult()方法也可以用来启动活动,
startActivityForResult (Intent intent, int requestCode)方法接收两个参数:
* 第一个参数还是Intent;
* 第二个参数是请求码,用来在之后的回调中判断数据的来源。
修改FirstActivity中按钮的事件,代码如下:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this,SecondActivity.class); //请求码只要是一个唯一值就可以。 startActivityForResult(intent, 1); } });
这里,使用startActivityForResult()方法来启动SecondActivity,请求码只要是一个唯一值就可以。
然后修改SecondActivity中按钮的点击事件,并添加返回数据的逻辑代码,代码如下:
button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); //调用setResult()方法,该方法专门用于向上一个活动返回数据的。 //setResult()方法接收首歌参数,第一个参数用于向上一个活动返回处理结果,一般使用RESULT_OK或RESULT_CANCELED //第二个参数是把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动。 setResult(RESULT_OK, intent); finish(); } });
上述代码中还是要创建一个Intent,这个Intent仅仅用来传递数据,它没有指定任何意图。把要传递的数据存放在Intent中,然后调用setResult()方法
接收两个参数。
调用setResult()方法,该方法专门用于向上一个活动返回数据的。setResult()方法接收两个参数,
*第一个参数用于向上一个活动返回处理结果,一般使用RESULT_OK或RESULT_CANCELED
*第二个参数是把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动。
因为使用startActivityForResult()方法来启动SecondActivity活动的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,所以需要在FirstActivity中重写onActivityResult()方法来得到返回数据。onActivityResult (int requestCode, int resultCode, Intent data)方法带有三个参数:
* 第一个参数:requestCode,是在启动活动时传入的请求码;
* 第二个参数:resultCode,返回数据时传入的处理结果。
* 第三个参数:data,带有返回数据的Intent。
在一个活动中有可能调用startActivityForResult()方法去启动不同的活动,每一个活动返回的数据都会回调到onActivityResult() 这个方法中,所以首先检查requestCode的值来判断数据来源,然后在通过resultCode的值来判断处理结果是否成功, 最后在从Intent中取返回的数据。
如果在SecondActivity中不是通过按钮返回FirstActivity,而是通过Back键返回,这样怎么返回数据呢?
在这里,如果通过Back键返回数据,可以通过在SecondActivity中重写onPressed()方法来返回数据,代码如下:
//如果不是通过SecondActivity中的按钮在返回,而是通过按钮Back键来返回,这就需要重写onBackPressed()方法来返回数据 public void onBackPressed(){ Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
这样,当用户按下Back键,程序就会执行onPressed()方法。
Android学习笔记(五)的更多相关文章
- android学习笔记五——AutoCompleteTextView
AutocompleteTextview ==> 使用比较容易,只需要为其设置一个Adapter,该Adapter封装其需要预设的文本内容. 如下所示实例: <RelativeLayout ...
- android学习笔记五
Android中的category大全 Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6): android.intent.category.ALTERNATIVE a ...
- Android学习笔记五:四大组件(转)
转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...
- android学习笔记五。2、其他组件
一.ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1.使用: 在应用中使用C ...
- android学习笔记五。1、Service深入学习
一.Service,服务是没有界面而在后台长期运行的程序,可以看做是后台的Activity. 1.在Android中按返回键退出一个应用并不会(内存充足时)直接销毁一个进程,所以其中的子线程也可以在后 ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference
目录(?)[-] 例子1ListPreference小例子 定义一个preferences XML文件 继承PreferenceActivity 用户定制偏好的读取 第一次运行时设置缺省值 设置Cat ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
随机推荐
- [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- IIS7配置asp网站
An error occurred on the server when processing the URL. Please contact the system administrator. If ...
- 【lattice软核】MICO8流程
The LatticeMico System software is composed of three bundled applications: Mico System Builder (MS ...
- 最大流 总结&&做题记录
最近一直很忙,为了节省时间,从今以后的题解会 一个专题 写一篇. 刷了一些题后,有了以下总结: 模型要点: 1.构造流量平衡,在满足流量平衡的情况下,找到要让什么最大. 2.一般用于判断性问题,即所有 ...
- 二模 (13)day2
第一题: 题目大意: 给出一个N*M的矩阵,定义一条路径的权值为经过的所有点权值的最大值.求一条从第一行到第N行的路径,使得路径权值最小. N,M<=1000 矩阵内点的权值小于1000. 解题 ...
- IOS时间传递机制简记
事件传递顺序:自定义View -- > UIview --> RootViewController --> UIWindow -->UIApplication -->Ap ...
- Ubuntu操作系统安装使用教程 (转)
随着微软的步步紧逼,包括早先的Windows黑屏计划.实施,逮捕番茄花园作者并判刑,种种迹象表明,中国用户免费使用盗版Windows的日子将不会太长久了,那么这个世界上有没有即免费又易用的操作系统呢? ...
- oracle查看当前用户权限
查看用户和默认表空间的关系select username,default_tablespace from dba_users;--查看当前用户能访问的表select * from user_table ...
- cassandra CQL 3.0 怎样实现 dynamic column;
1. cassandra有一个好的特点是列之间可以按照column key进行排序:这样当rowkey确定以后,对于同一个“行”的范围(range query)查找是很方便的:官方说法,每一个“行”( ...
- Python操作文件文档
需要帮老师将44G的图书分类一下,人工当然累死了.所以用Python大法处理一下. 思路是读取文件目录下的书名,然后去百度百科查分类,如果还没有就去豆瓣,当当查.哪一个先找到其余的就不用找了.如果没有 ...