四大组件之activity(二):activity跳转和数据传递

移动开发 来源:我是菜鸟请指教 9℃ 0评论

一个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