文档章节

深入理解 intent (1)

c
 chuiyuan
发布于 2014/05/11 14:53
字数 1238
阅读 1458
收藏 0
点赞 0
评论 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
海淀
Android 进阶之路(我的博客文章目录)

原文地址:http://blog.csdn.net/u011240877 为了方便读者阅读以及自己回顾,总结写过的文章和一些想要写的文章目录如下: 1.Java Java 解惑:Comparable 和 Comparator 的区别 Java 解惑:R...

u011240877
2017/04/01
0
0
Intent Filter匹配原则

应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个Intent Filter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的...

拉风的道长
2012/06/22
0
0
Android 四个主干类的介绍

啰嗦几句先-.-, 按我的经验,对一个新的平台学习步骤大概是 1 对项目结构的了解 2 对平台中构成一个应用程序骨架主要类的学习 3 UI类(这个直观又容易入手,培养开发的感觉) 4 该平台上数据库...

JavaGG
2009/09/14
2.7K
1
Android中pendingIntent的深入理解

pendingIntent字面意义:等待的,未决定的Intent。 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int)...

程序袁_绪龙
2015/01/15
0
0
Android Intent 深入理解

什么是Intent Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内...

learn_more
2015/02/04
0
0
anroid-理解IntentService方式开启一个服务

从网上摘录了对IntentService总结较完整的结论: IntentService特征 1、会创建独立的worker线程来处理所有的Intent请求; 2、会创建独立的worker线程来处理onHandleIntent()方法实现的代码,...

pointerException
2015/08/03
0
0
Android中Intent的深入理解

Intent中文翻译过来是意图,但更合理的意思是消息传递器。 1.Intent在Android中是如何运行的呢? 作为 消息传递器,首先的具备 “装载”和 “卸载”消息的能力,在Android源代码中,Intent其...

IamOkay
2014/10/30
0
0
android利用微信intent-filter进行支付

最近项目内嵌入了webview 访问了“有赞” 平台进行交易,iOS 上默认就可以直接打开微信支付,我们Android客户端也他们说没有做任何处理,现在是无法跳转支付。也就是说用我们的app访问一个网...

AlienJun
2016/05/03
1K
0
Intent实现页面跳转

什么是Intent Intent可以理解为信使(意图),由Intent来协助完成Android各个组件之间的通讯。 2.Intent实现页面之间的跳转的方法 无返回值 -- startActivity(intent) 有返回值 -- startActi...

大道无名
2016/09/26
119
0
delphi XE5开发Android程序调用电话相关功能(短信息和电话)

XE5开发Android程序调用电话相关功能(短信息和电话) 时间:2013-9-19 16:46:08 点击:5570   核心提示:其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这...

vga
2014/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
42分钟前
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
53分钟前
2
0
将博客搬至CSDN

AHUSKY
今天
1
0
Python web框架Django学习(1)

1.Django简介 (1)Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django是一个开放源代码的Web应用框架,由Python写成。 (2...

十年磨一剑3344
今天
0
0
Databook-数据之书

Databook-数据之书 用于数据分析的Jupyter Notebooks。 不需购买服务器,快速开始自己的数据分析过程。 源码:https://github.com/openthings/databook 作者:openthings,https://github.co...

openthings
今天
5
0
Python PIPEs

https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm

zungyiu
今天
1
0
gRPC学习笔记

gRPC编程流程 1. proto文件定义 proto文件用于定义需要通过gRPC生成的接口,可以理解为接口定义文档 2. 通过构建工具生成服务基类代码-Maven或Gradle 3. 服务端开发 服务端实现类须实现通过构...

OSC_fly
今天
0
0
Docker Mac (三) Dockerfile 及命令

Dockerfile 最近学习docker的时候,遇到一件怪事,关于docker镜像可能会被破坏,还不知道它会有此措施 所以需要了解构建Dockerfile的正确方法 Dockerfile是由一系列命令和参数构成的脚本,这些命...

___大侠
今天
0
0
Android Studio+NDK+Cmake 移植FFmpeg-4.0.2命令行工具

一、编译 参考大神的帖子,亲测一次编译成功:https://blog.csdn.net/bobcat_kay/article/details/80889398 鉴于以前查文档的经验,这里附上编写例子的时间:2018年7月22日 我用的是ubantu,...

她叫我小渝
今天
0
0
mysql创建数据库

登录MYSQL mysql -u root -p 脚本创建数据库WeChat,并制定默认的字符集是utf8mb4。 CREATE DATABASE Wechat DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 授权 grant all......

niithub
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部