Activity之间的通信
通常Activity之间的通信有三种方式:单向不传参数通信、单项传参数通信和双向通信。
这几种传递方式都需要通信使者Intent。以下将用代码来辅助理解。
1、单向不传递参数通信
public class MainAct extends Activity{
private Button mBtn=null;
private final static int REQUEST_CODE=1;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBtn=(Button)findViewById(R.id.mainBtn);
mBtn.setOnClickListener(mlistener);
}
private OnClickListener mlistener=new OnClickListener(){
@Override
public void onClick(View v){
//第一个参数为当前Activity的对象,第二个参数为所要通信的对象的类
Intent intent=new Intent(MainAct.this, BActivity.class);
startActivity(intent);
}
};
这样就可以从一个Activity跳转到另一个名为BActivity的界面了。
2、单项传参数通信
public void onClick(View v){
Intent intent=new Intent();
intent.setClass(MainActivity.this, BActivity.class);
//通过putExtra(“name”,“values”)---键值对;传递一些额外的数据,如一个list数据、name等,
//这个参数根据我们的需要来设定。
intent.putExtra("str", "list");
intent.putString("name", "linjiqin");
intent.putInt("age", 24);
startActivity(intent,);
}
其他代码与 “单向不传递参数通信” 一样,其实代码就多了金黄色的这一部分。
除了Intent.putExtra方法,将参数传入之外,还可以用Bundle传入参数,如下:
Bundle bundle = new Bundle();
bundle.putString("name", "name");
intent.putExtras(bundle);
3、双向通信
Activity的双向通信:A传到B并从B返回值(我们所希望传回的值);
1.MainAct中的代码如下:
在MainAct中的其他代码与“单向不传递参数通信” 一样。
public void onClick(View v){
Intent intent=new Intent(MainAct.this, BActivity.class);
intent.putExtra("name", "liming");
//需要返回值时用该方法----从BActivity返回的值
private final static int REQUEST=1;//(int类型)
startActivityForResult(intent, REQUEST);
}
//为了容易区别各参数,进行了颜色标记
//在BActivity 中获取返回值并进行处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode==REQUEST){//判断传进来的请求码是否与发送的相同
if (resultCode==BActivity.RESULT){//判断传进来的结果码是否与Bactivity发送的相同
//获取传进来的数据也可以使用Intent intent=getIntent(); 获取
Bundle bundle=data.getExtras();
String str=bundle.getString("back");
Toast.makeText(MainAct.this, str, Toast.LENGTH_LONG).show();
}} } }
2.在BActivity中写的代码:
public class BActivity extends Activity{
public final static int RESULT=1;
private TextView BTxt;
private Button Btn;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.bactivity);
BTxt=(TextView)findViewById(R.id.BTxt);
Btn=(Button)findViewById(R.id.Btn);
Intent intent=getIntent();
Bundle bundle=intent.getExtras();//获取MainAct传来的数据
String str=bundle.getString("name"); //对MainAct传来的数据进行处理
BTxt.setText(str);
Btn.setOnClickListener(mlistener);
}
//返回MainAct数据的代码
private OnClickListener mlistener=new OnClickListener(){
@Override
public void onClick(View v){
Intent intent=new Intent();
intent.putExtra("back", "Back Data");
setResult(RESULT, intent);//返回给MainAct的数据
finish();
}
};
}
说明:
用Intent intent=getIntent();或者 Bundle bundle=intent.getExtras();获取传来的数据。
String str=bundle.getString("str");获得前一个Activity传来的参数。
这里还需要返回给MainAct参数,用到了setResult(RESULT, intent);
这里的RESULT必须与前一个MainAct 的一致,否则就不能正常返回。而在MainAct通过
重写onActivityResult()来取得相应的返回值并进行处理。
Activity之间的通信的更多相关文章
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Fragment的生命周期和Activity之间的通信以及使用
Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- Fragmen和Activity之间的通信--接口和实现的分离(转)
Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台 在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
- Fragment与Activity之间的通信
我个人将Fragment与Activity间的通信比喻为JSP与Servlet间的通信,fragment中用接口的方式来进行与Activity的通信.通信的结果可以作为数据传入另一个Fragmen ...
随机推荐
- QBC分页查询
1.第一种方式 public class DetailDaoImpl extends HibernateTemplate implements DetailDaoInterface { private ...
- Distributed Transaction Coordinator 无法启动
有时候我们需要进行COM应用程序的权限设置,控制面板-->管理工具-->组件服务-->然后依此展开:组件服务-->计算机-->我的电脑-->DCOM 配置,接下来找 ...
- javascript URI的编码
用encodeURIComponent,但是不清楚她和encodeURI的区别, w3school 对其的解释: encodeURIComponent() 函数可把字符串作为 URI 组件进行编码.( ...
- 本机搭建外网web服务器
版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 首先声明一下楼主是个开发人员,按理说这些搭建服务器什么的,和楼主半毛钱的关系都没有.但是呢,楼主是个爱学习的人,懂得德智体全面 ...
- 【转】用Python实现各种排序算法
以下代码均为python3版本的代码 # 冒泡排序 # 比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上. def bubbleSort(list ...
- linux编程中printf显示不加换行的缓冲问题
最近在编写linux网络编程时,总是遇到这样的事,程序逻辑没错误,但是程序运行到某个地方就停在那里了,后来才发现在prinrf()中加入换行能正常运行了,如“ printf("123&quo ...
- 生产者消费者模式--阻塞队列--LOCK,Condition--线程池
1.阻塞队列:http://www.cnblogs.com/dolphin0520/p/3932906.html 2.Condition 生产者消费者实现 :http://www.cnblogs.co ...
- hdu 2896 字典树解法
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...
- JAVA课程实验报告 实验三 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 错误:Method not found: 'Void System.Web.UI.ScriptResourceDefinition.set_LoadSucce
vs2012开发,再把.net 4.5降成4.0.部署到2003 服务器上就报错了. 在网上查了下,老外说:这个方法.net4.0不支持. 后面发现是发布方式错了,用项目里的发布,不要直接拷贝文件过去 ...