博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解 intent (1)
阅读量:6884 次
发布时间:2019-06-27

本文共 5506 字,大约阅读时间需要 18 分钟。

hot3.png

一. 使用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 。首先是界面文件,这里只写要注意的:

    

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);				}			}			});

转载于:https://my.oschina.net/chuiyuan/blog/263175

你可能感兴趣的文章
聊聊flink的AbstractNonHaServices
查看>>
搭建一个通用的脚手架
查看>>
PAT A1071
查看>>
【笔记】重学前端-winter
查看>>
windows下重装xampp并做mysql数据迁移的步骤
查看>>
Java日志组件间关系
查看>>
聊聊前端国际化文案该如何处理
查看>>
JS难点之hoist
查看>>
“独角兽”企业都爱选择腾讯云,背后原因值得考究
查看>>
浅析 Vue 2.6 中的 nextTick 方法
查看>>
199. Binary Tree Right Side View
查看>>
配置SpringBoot方便的切换jar和war
查看>>
2018最佳GAN论文回顾(下)
查看>>
Vue使用element-ui所遇BUG与需求集结(二)
查看>>
使用Redis管道提升性能
查看>>
包含Min函数的stack
查看>>
Java 8 常用时间 api
查看>>
联发科技智能家居事业群接管电视业务,下半年发8K电视芯片 ...
查看>>
用AI赋能客服,灵声科技获数千万元A轮融资
查看>>
3月14日云栖精选夜读 | 阿里云成为开源组织CDF创始成员,积极推动软件生态构建 ...
查看>>