Android中实现activity的页面跳转并传值

一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。

本次我们就讲一下,Android中页面跳转以及传值的几种方式!

Activity跳转与传值,主要是通过Intent类来连接多个Activity.

1. Intent显式意图

(1) 最常见最一般的页面跳转代码,很简单,如下:

Intent intent = new Intent(A.this, SecondActivity.class);
startActivity(intent);

也可以这样写:

Intent intent = new Intent();
intent.setClass(A.this, SecondActivity.class);
startActivity(intent);

(2) 当然,你需要新建一个SecondActivity的界面,并继承activity,重写onCreate方法:

1 public class SecondActivity extends Activity {
2
3     @Override
4     protected void onCreate(Bundle savedInstanceState) {
5         super.onCreate(savedInstanceState);
6         setContentView(R.layout.activity_second);
7     }
8
9 }

(3) 当然新建了一个activity后记得在清单文件中进行注册.

(4) 在onCreate方法里设置布局文件: R.layout.activity_second,所以需要在res目录下新建

这样就可以使用显示意图实现页面跳转了.

2.隐式意图

隐式意图与显式意图在写法上有以下几点不一样:

(1) 在清单文件中注册需要加意图过滤器

 1 <activity android:name="com.example.intent.SecondActivity">
 2             <intent-filter >
 3
 4                 <action android:name="com.itheima.open02"/>
 5
 6                 <!-- 一般配置 隐式意图 的时候就需要写 category
 7                     表示用在 默认的设备中 (默认的运行在 手机中 的)  -->
 8
 9                 <category android:name="android.intent.category.DEFAULT"></category>
10
11                 <data android:scheme="haha" />
12                 <data android:mimeType="image/jpeg"/>
13                 <data android:host="www.google.com"/>
14             </intent-filter>
15         </activity>

(2) 在创建Intent对象时:

1 Intent intent = new Intent();
2
3 intent.setAction("com.itheima.open02");
4
5 intent.addCategory("android.intent.category.DEFAULT");
6
7 intent.setDataAndType(Uri.parse("haha://www.google.com"), "image/jpeg");
8
9 startActivity(intent);

这里需要注意一点:

data和type可以单独使用,但是他俩是互斥的

也就是说,使用了data就不能使用type,这个看API可以知道

如果想同时使用他俩的话,就需要用setDataAndType方法

注意: 隐式意图必须包含动作(action),以及数据(data)

3. 显式意图和隐式意图的区别

  • 显式意图: 一般用于激活应用程序内部的
  • 隐式意图: 一般用于激活其他应用程序的组件

4. 数据传递

(1) 要想实现在页面跳转的同时传递数据,只需要用一个方法即可:putExtra()

1 Intent intent = new Intent(this, SecondActivity.class);
2 intent.putExtra("name", et_name.getText()+"");
3 startActivity(intent);

(2) 如果要传递复杂一点的数据,如图片:

putExtra可以传递一个Parcelable对象,而图片的bitmap是Parcelable的子类

所以可以这样操作:

1 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
2 intent.putExtra("pic", bitmap);

5. 数据接收

1 // 首先获取到意图对象
2 Intent intent = getIntent();
3
4 // 获取到传递过来的姓名
5 String name = intent.getStringExtra("name");
6
7 // 获取到传递过来的图片
8 Bitmap bitmap = intent.getParcelableExtra("pic");

6. startActivityForResult

如果用正向传递的方式是可以实现数据的回归的,但是这样做的坏处是开启了很多个Activity累积到栈中,当点击返回的时候就会逐一打开之前的Activity,这样的用户
体验是非常不好的,所以通过数据的反向传递的方式保证Activity只有当前的一个,当用户点击返回时可以直接退出。

下面以一种需求为例,讲解startActivityForResult,发送短信小助手:

用户点击"选择模板"跳到短信模板的界面,然后点击某一条短信,直接将选择的短信返回到页面中

主界面:

选择模板短信的界面:

选择联系人界面:

这里的列表是用listview来做的,点击对应的listview可以将结果返回到主界面中.

以下是两个按钮点击事件的代码:



 1 /**
 2      * 选择短信模板
 3      * @param view
 4      */
 5     public void selectSms(View view){
 6         //点击后跳转到短信模板界面
 7         Intent intent = new Intent(this, SmsActivity.class);
 8
 9         //两个参数:Intent intent 意图对象
10         //int requestCode 请求码
11         startActivityForResult(intent, 2);
12     }
13     /**
14      * 选择收信人
15      */
16     public void addContacts(View view) {
17         // 点击后跳到联系人列表界面
18         Intent intent = new Intent(this, ContactsActivity.class);
19
20         //为了一个结果 去启动另外的一个 activity 界面
21         startActivityForResult(intent, 1);
22     }

注意: 还需要重写onActivityResult()方法,来接收返回的数据

示例代码如下:

 1 @Override
 2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 3         super.onActivityResult(requestCode, resultCode, data);
 4
 5         // resultCode : 结果码, 用来鉴别 到底是  哪个 结果 ...
 6         if (data != null) {
 7             if (resultCode == 1) {// 说明是联系人的返回结果
 8                 contact = data.getStringExtra("contact");
 9                 et_contact.setText(contact);
10             }else if(resultCode == 2){//说明是短信模板的返回结果
11                 sms = data.getStringExtra("sms");
12                 et_content.setText(sms);
13             }
14         }
15     }

以下是短信模板的示例代码:

 1 public class SmsActivity extends Activity {
 2
 3     String [] sms = {"短信1","短信2","短信3","短信4"};
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_sms);
 8
 9         ListView lv_sms = (ListView) findViewById(R.id.lv_sms);
10
11         lv_sms.setAdapter(new ArrayAdapter<String>(this, R.layout.item_sms, sms));
12
13         lv_sms.setOnItemClickListener(new OnItemClickListener() {
14
15             @Override
16             public void onItemClick(AdapterView<?> parent, View view,
17                     int position, long id) {
18
19                 String template = sms[position];
20
21                 Intent data = new Intent();
22
23                 data.putExtra("sms", template);
24
25                 //int resultCode, 结果码,用于区分到底是哪个的返回数据
26                 //Intent data
27                 setResult(2, data);
28
29                 finish();
30             }
31         });
32     }
33
34 }

好了,关于页面跳转就先介绍到这里.

时间: 2024-12-22 21:58:30

Android中实现activity的页面跳转并传值的相关文章

Android开发之Activity的创建跳转及传值

在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介绍的就是Android开发中的四大组件之一:Activity,其他那三大组件以后再进行介绍.说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制器).在应用中能看到的东西都是放在活动中的.活动是安卓开发比较重要的东西

android 开发点击弹出对话框中的按钮进行页面跳转如何实现

android开发中,点击弹出对话框中的按钮进行页面跳转,如何实现?可以这样做: 可以获取对话框的点击事件,比如点击了确定然后你就跳转 AlertDialog.Builder builder = new Builder(CommentActivity.this); builder.setMessage("确定要跳转吗?"); builder.setTitle("提示"); builder.setPositiveButton("确认", new a

Android Day06四大组件之Activity多页面跳转和数据传递

1.什么是Activity   官方文档是这么说的:An Activity is an application component that provides a screen     with which users can interact in order to do something, such as dial the phone,     take a photo, send an email, or view a map. Each activity is given a wind

Android混合应用开发之页面跳转

Android混合开发之Activity类与html页面之间的相互跳转(并解决黑屏问题) 在底部有本程序源码下载 本程序流程:程序启动-->testActivity--->phonegap2框架类--->index.html--->testActivity,主要实现activity与html页面的相互跳转,并实现 传递参数的功能. 程序结构图: 1.创建一个安卓项目,在该项目里面添加PhoneGap框架(具体步骤请点击查看),我们知道我们在定义一个主界面的时候往往用的是Activi

Android中半透明Activity效果另法

Android中的Activity有没有类似于像Windows程序样的窗口式显示呢? 答案当然是有. 下图就是一个窗口式Activity的效果图: 下面就说说实现过程: 首先看看AndroidManifest.xml 1: <?xml version="1.0" encoding="utf-8"?> 2: <manifest xmlns:android="http://schemas.android.com/apk/res/android

iOS——使用StroryBoard页面跳转及传值

之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思想,页面文件与代码文件是分离的,这点与Android的类似.在使用storyboard的方式中,新建页面只需要在storyboard中拖入一个View Controller则可, 接下来就可以在新建的页面中添加各种控件来编辑这个新建的页面. 在新建的页面上编排各种视图控件如同在Android中编辑那

[爱上Swift]十三期:使用StroryBoard页面跳转及传值

之前在网上iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思想,页面文件与代码文件是分离的,这点与Android的类似.在使用storyboard的方式中,新建页面只需要在storyboard中拖入一个View Controller则可: 接下来就可以在新建的页面中添加各种控件来编辑这个新建的页面. 在新建的页面上编排各种视图控件如同在Android中编辑那个

iOS使用StroryBoard页面跳转及传值

之前在网上iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思想,页面文件与代码文件是分离的,这点与Android的类似.在使用storyboard的方式中,新建页面只需要在storyboard中拖入一个View Controller则可, 接下来就可以在新建的页面中添加各种控件来编辑这个新建的页面. 在新建的页面上编排各种视图控件如同在Android中编辑那个

ASP.NET页面跳转及传值方式

ASP.NET页面跳转相关知识 一.<a>标签 1. <a href=”test.aspx”></a> 2. 这是最常见的一种转向方法; 二.HyperLink控件 1. Asp.net 服务器端控件 属性NavigateUrl指定要跳转到的Url地址 2. NavigateUrl是可以在服务器端使用代码修改,这个区别于<a> 3. 由于HyperLink本身没有事件所以要在服务器端其它事件中设置NavigateUrl 4. 代码示例: <Asp:Hy