文档章节

深入理解 intent (1)

c
 chuiyuan
发布于 2014/05/11 14:53
字数 1238
阅读 1.5K
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

一. 使用Internt 连接activity

1.创建 intent 

用下面的构造方法

Intent.Intent(Context packgeContext ,Class <?> cls );

或者先构造 一个未指向 的intent,再用下面方法

Intent.getClass(Context packageContext,Class <?> cls);

2.调用 Intent

Activity.startActivity( Intent intent);

如果 想下一个Activity时返回原来 的activity ,则

Activity.startActivityForResult (Intent intent ,int requestCode );


note :应用中的activity都要在 manifest文件中注册。


二. 使用activity传递数据 

1. 在第一个activity中存入 数据 ,

Intent.putExra( String name ,String value );

name value 类似于键 值对应的,如HashMap ,name =key。不过这里它们的类型是Bundle(专门为activity面设计 的,本质 是HashMap的再封装。

2.在目标activity中取出intent中的值 

先用getIntent();得到intent对象。再

Intent.getExtras() ;

得到的是一个Bundle对象。

Bundle.getString( String key )

从而得到里面的key对应的 数据 。


三。如果要返回

steps:

1.  Activity.startActivityForResult( Intent intent ,int requestCode )

第二个参数 是请求码,用来标识 这次请求

2. 在onActivityResult 中,我们对返回的结果 进行处理。

protected void onActivityResult (int requesCode, int resultCode ,Intent data){

super.onActivityResult(...);

}

参数1:请求码,标识本次结果对应那个请求。

参数2:结果码,两种  。

RESULT_OK =-1:本次操作成功,则返回这个 

RESUKT_CANCELLED = 0:操作取消,返回这个值 。

还有一个是 1  。自己定义 不要与之重复。

结果码除了可以用来区分 操作是否成功,还可以 区分 是由那个activity 返回的 。

参数3 :可以用  Intent.getExtras() 得到返回的值。

3.在目标activity中new 一个 Intent 对象,不用指定要跳转的activity 

   再使用 Intent.putExtras(Bundle bundle) 将数据与intent 绑定。

4.将intent 传入到结果 中,用

Activity.setResult( int requestCode, Intent data );

5 .调用 finish()。

结束本activity ,系统 会自动 调用 之前 的onActivityResult ().


onActivityResult(int requestCode, int resultCode, Intent data)中:

requestCode-->鉴别是谁打开的。

resultCode--->鉴别谁返回(关闭)的。


*startActivityForResult(intent, requestCode)首先文档告诉我们,只有到activity结束的时候,才会返回消息。

*startActivityForResult(intent, requestCode)中的俩个参数 ,第一个不用多说。第二个requestCode,一般情况下,我们只需要保证

requestCode>-1即可,这样它都能收到result。但是如果在A activity中,能够跳转到多个activiity,并且要接受到这多个activity中的信息的时候,我们就要注意了,这时候,requestCode就起大作用了,当你startActiviityForResult()的时候, 给每一个不同的activity一个独立的requestcode,那么在你接受到result的时候就可以通过这个参数来判断,结果是那个acitivity返回来的了。

*那么如果是,A activity跳转到B activity的时候,b有可能返回N种结果,而你在A中需要根据这N中不通的返回结果做出N种不通的处理的时候那该怎么办呢?当然,你可以用data,中添加数据了识别,但是android提供了更好的一种方式,那就是

onActivityResult(requestCode, resultCode, data)中的resultcode,你可以setresult()的时候,根据不通的结果返回不同的resultcode,这样就能区分开来。


三。例子    

    我们完成下面的例子,主要用到的知识点有:

(1)startActivityForResult ()

(2) requestCode 和 resultCode 的不同

(3) Edittext中怎么加入提示。要用到 android:hint 标签 

1 。首先是界面文件,这里只写要注意的:

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="19dp"
        android:hint="请输入姓名"
        android:focusable="true"  
   	 android:focusableInTouchMode="true"
        android:ems="10" >


2. java文件

    首先是整体部分的关键部分

先定义 了

static final int REQUEST_CODE1=1;	//requestCode-->鉴别是谁打开的。
	static final int REQUEST_CODE2=2;
	static final int RESULT1=2;   //activity 1 中返回两结果 
	static final int RESULT2=3;


然后

btn1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i1= new Intent (getBaseContext(),Act1.class);
				startActivityForResult(i1 ,REQUEST_CODE1);   //由 btn1 打开的
	
			}
		});
		
		btn2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i2= new Intent(getBaseContext(), Act2.class);
				startActivityForResult (i2 ,REQUEST_CODE2);   //由   btn 2 打开 的
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		switch(requestCode){
		case REQUEST_CODE1:   //分辨是那个请求的结果 
			if(resultCode==RESULT1){
				Bundle bundle=data.getExtras();
				String request1= bundle.getString("activity1");
				tv1.setText("request1 result1  :"+request1);
			}else if (resultCode==RESULT2){
				Bundle bundle=data.getExtras();
				String request1= bundle.getString("activity1");
				tv1.setText("request1 result2  :"+request1);
			}
		case REQUEST_CODE2:
			if(resultCode==RESULT_OK){    //此处是否要用break;
				Bundle bundle2 = data.getExtras();
				String request2 =bundle2.getString("activity2");
				tv2.setText("request2 :"+request2);
			}
			default: break;
		}
			
		super.onActivityResult(requestCode, resultCode, data);
	}

然后是activity 1  的关键部分

定义 了

static final int RESULT1=2;
	static final int RESULT2=3;

btnR2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String resultActivity1= et2.getText().toString();
				Intent irequest1= new Intent ();
				Bundle bundle = new Bundle();
				bundle.putString("activity1", resultActivity1);
				irequest1.putExtras(bundle);
				setResult(RESULT2,irequest1);
				finish();
			}	
		});
		
		btnR1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String resultActivity1= et1.getText().toString();
				Intent irequest1 = new Intent ();
				Bundle bundle = new Bundle();
				bundle.putString("activity1", resultActivity1);
				irequest1.putExtras(bundle);
				setResult(RESULT1, irequest1);
				finish();
			}	
		});


activity 2 的主要部分

btnR.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String resultActivity2 = et.getText().toString();
				Intent irequest2= new Intent ();
				Bundle bundle = new Bundle();
				bundle.putString("activity2", resultActivity2);
				irequest2.putExtras(bundle);
				setResult(RESULT_OK, irequest2);
				finish();
			}
		});
		
		et.setOnFocusChangeListener(new OnFocusChangeListener(){
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				// TODO Auto-generated method stub
				String hint ;
				if (hasFocus){
					hint = et.getHint().toString();
					et.setTag(hint);
					et.setHint("");
				}else {
					hint = et.getTag().toString();
					et.setHint(hint);
				}
			}	
		});





c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7
SmartGWT学习整理 2、理解核心中的核心DataSource

SmartGWT学习整理 2、理解核心中的核心DataSource DataSource之所以重要,是因为它负责所有的与服务器的数据交互,几乎所有的控件都离不开它。 可以这样说,理解了DataSource就掌握了SmartGW...

st97
2010/11/16
2K
2
【分享】Cocos2dx工具之Cocostudio界面编辑器二

(作者:forward)在《【Cocos2dx工具——Cocostudio界面编辑器】一》博客结束的时候,Forward提出两个问题——1、有了编辑好的UI界面之后,我们如何把它们加载到程序中去呢?2、如何使对应的...

桑莱特
2013/06/05
4.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

画国旗,为祖国庆生!告诉你所不知道的关于国旗的那些事

1.关于国旗尺寸与标准的规定 五星红旗的形状为长方形,红色象征革命,其长与高之比为3:2,旗面左上方缀黄色五角星五颗,象征共产党领导下的革命大团结,星用黄色象征红色大地上呈现光明。一星...

pythonexpert
2019/09/30
0
0
再见,ELK!

点击上方蓝色字体,选择“标星公众号” 优质文章,第一时间送达 99套Java企业级实战项目 4000G架构师资料 作者:linkt1234 blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公...

老炮说Java
07/04
0
0
区域经济评论:国际区块链产业发展概况分析

从全球范围看,在产业规模层面,全球在经历了2014年和2017年的区块链企业成立数量高峰期后,自2018年起,截至2019年8月,全球共有2450家区块链企业。美国、中国、英国区块链企业数量分别位列...

osc_4dgu16li
1分钟前
0
0
硬件:那些安装8G、16G以及32G内存电脑的区别介绍

现如今的电脑都是8G内存起步的,不管是台式电脑还是笔记本电脑都一样。而因为内存条价格不贵的关系,大家都在考虑是否将8G内存升级为16G内存,甚至32G内存。但是这真的有必要吗?8G、16G以及...

osc_m8miia9c
3分钟前
0
0
每天分享一些好句子,赏个心情~😁

本文分享自微信公众号 - 程序员的时光(gh_9211ec727426)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

程序员的时光
04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部