一个andrid应用程序,肯定会涉及到activity之间的跳转,在跳转的时候进行数据传递,这是最基本的要求。
那么如何进行activity的跳转和数据传递呢,接下来我说一下我的学习心得体会
activity之间的跳转主要是intent来连接的,如何实现呢,先来看一个简单的例子:
想要A跳转到B,可以这样实现:
Intent intent=new Intent();
intent.setClass(A.this,B.class);
startActivity(intent);
或者:startActivity(new Intent(A.this,B.class));
当然,A和B都要继承在Activity。
可能写到这,对于许多初学者来说,已经知道了如何进行页面跳转了,但是,曾经是小白的我在网上看这类文章,我会有这样的疑问:Intent是个什么东西?于是乎就又要在浩瀚的网络海洋中查找关于Intent的相关知识,所以,在这里我觉得有必要说一下Intent了。
Intent:翻译过来是"意图",作用是用来激活组件和传递数据。Intent的目的是本着"高内聚,低耦合"的原理,来进行组件之间的解耦的,耦合性当然指的是组件与组件之间的联系,越不紧 密,越好,便于代码的维护,那么提到意图,就不得不说Intent的分类了,intent总共分为两类:
显示意图:
原理:直接指定类的字节码文件,来开启目标Activity
优点:效率高,代码书写简单
缺点:只能开启自己应用程序中的activity,不能开启其他应用程序中的activity,比如,你可以在你的应用程序中从a跳到b,但是如果有一个需求,让你打开系统的联系人界面,他就无能为力了。
编写步骤:
1.创建意图对象,指定类的字节码文件
Intent intent=new Intent(this,OtherActivity.class);
2.开启目标acytivity
startActivity(intent);
隐式意图:
原理:开启目标activity,需要去清单文件中匹配动作,如果匹配成功,就开启activity,如果匹配失败,就会报classnotfoundexception这个异常,应用程序会崩溃。
优点:可以开启自己应用程序和其他应用程序的activity
缺点:代码书写复杂,效率低
Intent介绍完了,最基本的开启Activity的方法也说了,下面就来说一下Activity之间的数据传递
Activity之间传递数据,通过Intent来传递,那么他可以传递什么数值呢?请耐心看下面的:
1. java :八大基本类型及其数组
2. bundle :数据捆
3. Serializable :序列化
4. Parcelable :序列化到公共内存
5. Intent :意图类型
不可以传递Object哦!!!
好了,Intent可以在activity中进行数据传递,具体是怎么做到的呢,在这就不得不说另外一种跳转方式了:startActivityForResult(Intent intent,int requestCode);他是这样做到的:
1. 特殊的方式开启activity
startActivityForResult(intent, 1);
2. 设置返回的数据
Intent intent = new Intent();
intent.putExtra("num", phoneNum);
3. 设置返回的数据
setResult(10, intent);
//关闭当前页面
finish();
4. 获取activity返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String phoneNum = data.getStringExtra("num");
etContacts.setText(phoneNum);
}
这样就可以完成数据的传递了。当然除了这个方法,在普通的页面跳转中也是可以传递数据的:
Activity:A
Intent intent =new Intent();
intent.putExtra("name", userName);
intent.setClass(A.this,B.class);
startActivity(intent);
Activity:B
Intent intent =getIntent();
String name = intent.getStringExtra("name");
这样就完成了A和B之间的数据传递了。