Android中Activity之间的通信和传值
2015-10-25 11:46
411 查看
Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,通过 Activity.
startActivity(intent) 启动另外一个 Activity ,Intent当作目的地址,Bundle当作所携带的内容。
intent直接跳转启动到新Activity,也可以带参数。
在启动新的Activity中,取传过来的数值。
打印结果:
![](http://img.blog.csdn.net/20151025121724545?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
通过startActivityForResult(intent, REQUSET)传值启动Activity并返回结果:
1.创建Intent对象。
2.启动指定Activity并等待返回结果,其实请求码是用来标志该请求startActivityForResult(intent,
REQUSET)。
3.重新onActivityResult(int requestCode, int resultCode,
Intent data)接收指定Activity返回的结果。
在指定Activity中:
1.获取Intent的对象intent。
2.通过intent添加参数,或用Bundle包装需要返回的数据并put入intnet中。
3.设置该Activity的结果码,并设置结束之后要返回的Activity: setResult(RESULT_OK, intent)。
4.finish()掉该Activity。
![](http://img.blog.csdn.net/20151025121830407?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151025122031994?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151025121847738?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图a 图b 图c
图a中在StartActivityForResultActivity界面启动--->进入图b,在SetResultActivity界面,输入数值----又返回StartActivityForResultActivity界面,拿到返回的数值,进行显示。
示例代码
StartActivityForResultActivity:
在onActivityResult方法中结束下面代码传过来的数据。
若有多个返回请求code,就在下面采用switch分支语句接受不同的请求码,来进行相应的出来
SetResultActivity:
示例代码
startActivity(intent) 启动另外一个 Activity ,Intent当作目的地址,Bundle当作所携带的内容。
intent直接跳转启动到新Activity,也可以带参数。
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //第1中方式.打开新的Activity,不传递参数 //新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类 //Intent intent1=new Intent(MainActivity.this,StartActivityForResultActivity.class); //startActivity(intent1); //第2中方式.打开新的Activity,并传递若干个参数给它 //Intent当作目的地址,Bundle当作所携带的内容 Intent intent2=new Intent(MainActivity.this,StartActivityForResultActivity.class); Bundle bundle=new Bundle(); bundle.putBoolean("boolean_key", false); bundle.putString("String_key", "apple"); bundle.putDouble("Double_key", 6.66); bundle.putInt("int_key", 20); intent2.putExtra("all_key", bundle); startActivity(intent2); } });
在启动新的Activity中,取传过来的数值。
Intent intent = getIntent(); Bundle bunble = intent.getBundleExtra("all_key"); boolean booleanValue = bunble.getBoolean(""); double doubleValue = bunble.getDouble("Double_key"); String stringValue = bunble.getString("String_key"); int intValue = bunble.getInt("int_key"); Log.i("info", "booleanValue"+booleanValue); Log.i("info", "doubleValue"+doubleValue); Log.i("info", "stringValue"+stringValue); Log.i("info", "intValue"+intValue);
打印结果:
通过startActivityForResult(intent, REQUSET)传值启动Activity并返回结果:
1.创建Intent对象。
2.启动指定Activity并等待返回结果,其实请求码是用来标志该请求startActivityForResult(intent,
REQUSET)。
3.重新onActivityResult(int requestCode, int resultCode,
Intent data)接收指定Activity返回的结果。
在指定Activity中:
1.获取Intent的对象intent。
2.通过intent添加参数,或用Bundle包装需要返回的数据并put入intnet中。
3.设置该Activity的结果码,并设置结束之后要返回的Activity: setResult(RESULT_OK, intent)。
4.finish()掉该Activity。
图a 图b 图c
图a中在StartActivityForResultActivity界面启动--->进入图b,在SetResultActivity界面,输入数值----又返回StartActivityForResultActivity界面,拿到返回的数值,进行显示。
示例代码
StartActivityForResultActivity:
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(StartActivityForResultActivity.this,SetResultActivity.class); //发送意图标 REQUSET=1用来标志请求一般设置int就行 startActivityForResult(intent, REQUSET); } });
在onActivityResult方法中结束下面代码传过来的数据。
若有多个返回请求code,就在下面采用switch分支语句接受不同的请求码,来进行相应的出来
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); //requestCode标示请求的标示 resultCode表示有数据 if(requestCode==StartActivityForResultActivity.REQUSET&&resultCode==RESULT_OK) { String value = data.getStringExtra("key_info"); tv.setText("返回值:"+value); Log.i("info", "requestCode="+requestCode+";"+"resultCode="+resultCode); // finish(); } Toast.makeText( this, "requestCode=" + requestCode + ":" + "resultCode=" + resultCode, Toast.LENGTH_LONG).show(); }
SetResultActivity:
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.putExtra("key_info", et.getText().toString()); setResult(RESULT_OK, intent); finish(); } });
示例代码
相关文章推荐
- Android ProgressBar
- 用淘汰的Android手机来DIY防盗器
- 【转】Caused by: android.os.NetworkOnMainThreadException错误解决办法
- Android之drawable state各个属性详解
- Android-->使用默认样式创建View
- Android屏幕适配全攻略(最权威的官方适配指导)
- AndroidStudio环境下导出APK
- Android开源组件---CircleImageView的使用
- Android_09_自定义内容提供者及访问内容提供者
- android layout的一些注意事项
- Android 线程之Message 的使用
- Android之SurfaceView学习
- android图片压缩总结
- Android之完成SQLite数据库版本更新的过程熟悉
- Android横竖屏切换生命周期
- Android性能测试工具Emmagee介绍
- OnFocusChangeListener接口简介以及案例分析
- android悬浮窗口的实现
- Android之浮动小窗口
- 一看就会Android之SQLite中事务的使用