/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
*http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
1、两种实现activity跳转的方法
实现activity的跳转主要有两种方法,startActivity()和startActivityForResult();
例如activity A跳转到activity B
对于,第一种,是把activity A的数据,通过intent传送到activity B,但是不能返回数据。
关于第一种,可以参考我之前的这篇博文
http://blog.csdn.net/conowen/article/details/7270393
2、第二种方法startActivityForResult()的详细用法
今晚谈的是第二种方法startActivityForResult();可以实现把activity A数据传送给activity B,也可以把activity B的数据返回来给activity A处理。
-
publicvoidstartActivityForResult(Intentintent,intrequestCode)
首先startActivityForResult 有两个参数,第一个为当前activity的intent(假设为activity A),至于第二个参数的用法,还是先看一下官方SDK文档的解释
-
requestCode:If>=0,thiscodewillbereturnedinonActivityResult()whentheactivityexits.
一般都是设置大于或者等于0,因为activity A可能不单单要跳转到activity B,也可能跳转到activity C,D,E……,这些activity返回来的数据都交由activity处理,那activity又通过什么来分辨返回来的数据到底是哪个activity回来的呢。
所以在activity A跳转到某一个activity时,要设定目标activity的requestCode,这个requestCode就唯一地标识了相对应的activity。
如下所示,当要跳转到activity B时,15表示是activity B的标识,
-
IntentActivity.this.startActivityForResult(intent,15);
同理,当在activity A的另外一个监听器要跳转到activity C时,设定activity C的标识为25。(大于或者等于0就行了)
-
IntentActivity.this.startActivityForResult(intent,25);
(通过onActivityResult方法可处理代表不同activity的requestCode数值,详细用法在第3点。)
3、数据处理方法onActivityResult()详解
然后activity A通过复写onActivityResult方法来处理这些activity返回来的数据。onActivityResult定义如下:
-
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
3.1、数据处理方法onActivityResult()有三个参数,第一个requestCode是用来区分哪个activity回来的数据,可以通过swith语句来筛选。
基本框架代码如下:
-
switch(requestCode){
-
case15:
-
switch(resultCode){
-
case0:
-
-
-
break;
-
case1:
-
-
-
break;
-
default:
-
break;
-
}
-
break;
-
case25:
-
switch(resultCode){
-
case0:
-
-
break;
-
default:
-
break;
-
}
-
default:
-
break;
-
}
3.2、第二个参数为resultCode,也是一个int类型,如果activity B有几种不同返回的结果,同样地可以通过resultCode来筛选。
当跳转到其他activity时,如activity B。需要知道的是,把activity B的数据返回去给activity A的处理方法是setResult (int resultCode, Intent data) ,可以看到它的第一个参数是resultCode,也就是对应着相应的处理方式,官方的推荐取值如下,这些是宏变量,实质是int。当然也可以自定义为数值,自己习惯就行了。
-
RESULT_CANCELED
-
RESULT_OK
-
RESULT_FIRST_USER
具体做法如下:如你可以在activity B做如下设置,两个button的监听器对应着两个resultCode,也就对应了两种处理方式,至于你要做什么事,在监听器定义即可。
-
button1.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
-
secondactivity.this.setResult(0,intent);
-
secondactivity.this.finish();
-
-
}
-
});
-
-
button2.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
-
-
secondactivity.this.setResult(1,intent);
-
secondactivity.this.finish();
-
}
-
});
3.3、第三个参数为Intent data,为activity返回来的数值,如通过data.getStringExtra("key");就可以取出来。
注意:调用setResult()方法跳回原来的activity时,一定要调用finish方法结束当前的activity
另外,如果activity A只需要跳转到activity B而已,那跳转时,request code只要大于或者等于0就行,而数据处理的方法onActivityResult()如下结构就行了,不用筛选request code。
-
switch(resultCode){
-
case0:
-
-
-
break;
-
case1:
-
-
-
break;
-
default:
-
break;
-
}
===============================================================================================
附上详细代码
从第一个activity跳到第二个,主要是验证 resultCode,
从第一个activity跳到第三个activity 和跳到第二个activity,主要是验证requestCode
效果图:
-
-
-
packageconowen.Activity.intent;
-
-
importandroid.app.Activity;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
importandroid.view.View;
-
importandroid.view.View.OnClickListener;
-
importandroid.widget.Button;
-
importandroid.widget.TextView;
-
importandroid.widget.Toast;
-
-
publicclassIntentActivityextendsActivity{
-
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
Buttonbt=(Button)findViewById(R.id.bt);
-
Buttonbt2=(Button)findViewById(R.id.bt13);
-
-
bt.setOnClickListener(newView.OnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
Intentintent=newIntent(IntentActivity.this,
-
secondactivity.class);
-
-
IntentActivity.this.startActivityForResult(intent,15);
-
-
-
}
-
});
-
-
bt2.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
Intentintent=newIntent(IntentActivity.this,
-
requestCodetest.class);
-
IntentActivity.this.startActivityForResult(intent,25);
-
-
}
-
});
-
-
}
-
-
@Override
-
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
-
-
super.onActivityResult(requestCode,resultCode,data);
-
switch(requestCode){
-
case15:
-
switch(resultCode){
-
-
case0:
-
-
Stringresultstr1=data.getStringExtra("result");
-
TextViewtv=(TextView)findViewById(R.id.tv);
-
tv.setText(resultstr1);
-
-
break;
-
case1:
-
-
Stringresultstr2=data.getStringExtra("result");
-
TextViewtv1=(TextView)findViewById(R.id.tv);
-
tv1.setText(resultstr2);
-
Toast.makeText(this,
-
"第2个activity的requestCode的值为"+requestCode,
-
Toast.LENGTH_LONG).show();
-
-
break;
-
default:
-
break;
-
}
-
break;
-
case25:
-
switch(resultCode){
-
caseRESULT_OK:
-
-
Stringresultstr3=data.getStringExtra("result3");
-
Toast.makeText(this,
-
"第3个activity的requestCode的值为"+requestCode,
-
Toast.LENGTH_LONG).show();
-
TextViewtv=(TextView)findViewById(R.id.tv);
-
tv.setText(resultstr3);
-
-
break;
-
default:
-
break;
-
}
-
default:
-
break;
-
-
}
-
-
}
-
}
-
-
packageconowen.Activity.intent;
-
-
importandroid.app.Activity;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
importandroid.view.View;
-
importandroid.view.View.OnClickListener;
-
importandroid.widget.Button;
-
importandroid.widget.EditText;
-
-
publicclasssecondactivityextendsActivity{
-
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.secondactivity);
-
-
-
Buttonreturnbt1=(Button)findViewById(R.id.returnbt1);
-
finalIntentintent=getIntent();
-
returnbt1.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
-
EditTextet=(EditText)findViewById(R.id.et);
-
Stringres=et.getText().toString();
-
intent.putExtra("result",res);
-
secondactivity.this.setResult(0,intent);
-
secondactivity.this.finish();
-
-
}
-
});
-
Buttonreturnbt2=(Button)findViewById(R.id.returnbt2);
-
returnbt2.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
-
intent.putExtra("result","验证resultcode");
-
secondactivity.this.setResult(1,intent);
-
secondactivity.this.finish();
-
}
-
});
-
-
}
-
-
}
-
-
-
packageconowen.Activity.intent;
-
-
importandroid.app.Activity;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
importandroid.view.View;
-
importandroid.view.View.OnClickListener;
-
importandroid.widget.Button;
-
importandroid.widget.EditText;
-
-
publicclassrequestCodetestextendsActivity{
-
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.requestcode);
-
-
Buttonbt3=(Button)findViewById(R.id.returnbt3);
-
-
bt3.setOnClickListener(newOnClickListener(){
-
-
@Override
-
publicvoidonClick(Viewv){
-
-
-
EditTextet3=(EditText)findViewById(R.id.et3);
-
Intentintent=getIntent();
-
Stringres=et3.getText().toString();
-
intent.putExtra("result3",res);
-
requestCodetest.this.setResult(RESULT_OK,intent);
-
requestCodetest.this.finish();
-
-
}
-
});
-
-
}
-
-
}
相关推荐
Android之Intent通过startActivityForResult方法启动新Activity
android入门级视频:Android基本组件介绍之Android应用的灵魂——Intent和Activity介绍与实例
Android源码——Intent切换.zip
Android Intent 学习笔记
安卓Android源码——Intent.rar
Android Activity和Intent机制学习笔记
Android学习笔记(三五):再谈Intent(下)-一些实践
Android开发笔记,内容涉及模拟器参数、进程与线程、Android 释放手机资源,进程释放优先级、分析HelloAndroid、添加编辑框与按钮、使用Intent启动另一个Activity、在不同Task中启动Activity、Intent与Intent ...
基于Android Studio 开发的源代码 本资源为本人以下博客的源代码。配对着代码学习会比较好 《Android学习笔记之——Activity》 ...《Android学习笔记之——通过Intent来实现Activity之间数据传递》
安卓Android源码——Intent1.rar
安卓Android源码——Intent切换.zip
安卓Android源码——Intent_ComponentSample.rar
安卓Android源码——Intent_TabHostSample.rar
安卓Android源码——Intent_DataSample.rar
android的intent学习笔记.pdf
Android学习笔记(七):多个Activity和Intent
第7章 良好的学习开端——Android基本组件介绍之Android应用的灵魂——Intent和Activity介绍与实例 第7章 良好的学习开端——Android基本组件介绍之用好列表,做好程序——列表(ListView)介绍与实例 第7章 良好的...
Android开发学习笔记(整理),整理论坛android学习笔记,较完整的讲解了android的内容。包括:view、activity、service、intent、广播机制、http连接、数据sqllite存储、后台线程、各种layout、偏好、本地文件操作、...
三种应用程序基本组件——activity, service和broadcast receiver——是使用称为intent的消息来激活的。Intent消息传递是一种组件间运行时绑定的机制. intent是Intent对象, 它包含了需要做的操作的描述, 或者, ...
Android学习笔记(1)-永远不变的Hello World Android学习笔记(2)-初识Activity Android学习笔记(3)-Activity的生命周期 Android学习笔记(4)-学习Intent的使用,