Android学习之路——Android四大组件之activity(二)数据的传递

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递

activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据。另一种数据类型是parcelable和serialable

用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下。

一、利用bundle传递基本数据类型

1、启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(intent)就能够将数据究竟到目标activity中去

AActivity中传递数据:

Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("name", "android");
intent.putExtra("age", 20);
intent.putExtra("isStudent", true);
startActivity(intent);

BActivity中接收数据: 目标activity中通过getIntent()方法获取Intent 对象,然后就能够通过getString getInt getBoolean等方法获取到传递过来的基本数据类型的数据

String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);
Boolean isStudent = getIntent().getBooleanExtra("isStudent", false);

执行结果:

2、关闭时返回数据

AActivity中启动activity

Intent intent = new Intent(AActivity.this, BActivity.class);
startActivityForResult(intent, 1);

BActivity中关闭activity并返回数据到AActivity

B中要做的工作有将要返回的数据放入intent中,然后设置返回结果码setResult(resultCode)一般结果码都是Activity.RESULT_OK,然后调用finish方法,关闭activity,返回到之前的activity

Intent intent = new Intent();
intent.putExtra("name", "这是bactivity关闭传递的数据");
setResult(Activity.RESULT_OK,intent);
finish();

接下来要在启动前的activity中接收返回的数据,重写ActivityResult方法就可以,第三个參数就是带数据的intent

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == Activity.RESULT_OK) {
			switch (requestCode) {
			case 100:
				resultTxt.setText(data.getStringExtra("result"));
				break;
			default:
				break;
			}
		}

	}

二、利用parcelabel和serializable传递复杂数据类型

1、parcelable传递数据

假设要传递自己定义的数据类型,那么将自己定义数据类型实现parcelable接口就可以。传递方法例如以下:

自己定义数据类型要实现parcelable接口,然后实现两个个方法describeContents   writeToParcel而且创建一个CREATOR,例如以下所看到的:

package com.yang.intentdemo;

import java.io.Serializable;

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable {
	private String name;
	private int age;
	private String job;

	public Person(String name, int age, String job) {
		super();
		this.name = name;
		this.age = age;
		this.job = job;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", job=" + job + "]";
	}

	public Person() {
		super();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(job);
		// TODO Auto-generated method stub

	}

	public static final Creator<Person> CREATOR = new Creator<Person>() {

		@Override
		public Person createFromParcel(Parcel source) {
			// TODO Auto-generated method stub
			return new Person(source.readString(),source.readInt(),source.readString());
		}

		@Override
		public Person[] newArray(int size) {
			// TODO Auto-generated method stub
			return new Person[size];
		}
	};

}

传递对象:

在MainActivity中传递对象:

Intent intent = new Intent(MainActivity.this,ReceivActivity.class);
Person person = new Person();
person.setName("zhangsan");
person.setAge(20);
person.setJob("IOS");
intent.putExtra("person", person);
startActivity(intent);

在ReceiveActivity中取出对象:

Person person = getIntent().getParcelableExtra("person");//接收对象
		if (person!=null) {
			tv1.setText("接收的对象是:"+person.toString());
		}

显示结果例如以下:

传递集合:

在MainActivity中传递集合:

Intent intent = new Intent();
				ArrayList<Person> persons = new ArrayList<Person>();
				Person person = new Person("wangwu", 18, "Android");
				Person person1 = new Person("lisi", 26, "PHP");
				Person person2 = new Person("zhaoliu", 24, "IOS");
				persons.add(person);
				persons.add(person1);
				persons.add(person2);
				intent.putParcelableArrayListExtra("persons", persons);
				intent.setClass(MainActivity.this, ReceivActivity.class);
				startActivity(intent);

在ReceiveActivity中取出集合:

ArrayList<Person> persons = getIntent().getParcelableArrayListExtra("persons");

		if (persons!=null && persons.size()>0) {

			StringBuilder sb = new StringBuilder();

			for(Person personlist : persons){
				sb.append(personlist.getName()+"=="+personlist.getAge()+"=="+personlist.getJob()+"\n");
			}

			tv2.setText(sb.toString());
		}

结果显演示样例如以下:

2、serializable传递数据

时间: 2024-08-01 10:46:14

Android学习之路——Android四大组件之activity(二)数据的传递的相关文章

Android学习之路——Android四大组件之activity(二)

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.还有一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inte

Android学习之路——Android四大组件之activity(一)

一.什么是Activity? Activity简单的说就是一个界面,我们在Android手机上看到的每一个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注册activity,这个activity就创建成功了. public class MyActivity extends Activity { } 2.清单文件注册activity <application android:a

Android 学习之路--android基础(三)

Android 学习之路--android基础(三) | Talent?C 盒子 盒子 博客 友链 关于 Posts List 作者Talent?C转载请注明出处 前言 上一篇文章我们介绍了 活动(Activity) 的作用及相关用法,我们知道活动是用来给用户展示 UI界面 的,那么在Android中都有哪些UI控件呢?今天就让我们来简单学习几种常见的 UI控件. 如何编写UI界面? Android Studio中为我们提供两种UI界面的编辑方式, 第一种是通过Android Studio 提供

android 学习教程六之----四大组件之一——BroadcastReciever

博客好长时间没有更新了,做个基础总结,继续之前的,温故而知新!该系列为入门篇,大神可以绕道! 大家好,今天给大家详解一下Android中的BroadcastReceiver.在Android中,在Android中,Broadcast是一种广 泛运用的在应用程序之间传输信息的机制是一种广泛运用的在应用程序之间传输信息的机制,本质上是一种全局的监 听器,用于监听系统全局的广播消息. BroadcastReceiver 有两种注册方式:一:静态注册方式 :二:动态注册方式 一:静态注册方式就是在Anr

Android 学习之路 1:如何在Activity之间传递数据

传递数据 新建 Activity 在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity. 此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用. 用Intent 发送数据 在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件. Button button; @Override protected void onCreate(B

四大组件之Activity(二)

人生是一场旅行,在乎的不是目的地,是沿途的风景以及看风景的心情. 本讲内容:Activity用法 一.活动被回收了怎么办? 当一个活动进入了停止状态,是有可能被系统回收的.如果一个应用有一个活动A,用户在活动A启动活动B,活动A就进入了停止状态,这个时候由于系统内存不足,将活动A回收掉,如果用户按下Back键返回活动A,这里不会执行onRestart()方法,而是执行活动A的onCreate()方法重新创建一次.但是如果活动A是可能存在临时数据和状态的,譬如:活动A中有一个文本框,现在你输入了一

Android学习之路(转载)

原文地址:http://stormzhang.github.io/android/2014/07/07/learn-android-from-rookie/ 硬件 电脑–推荐Mac 首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面的开发工具简直难以恭维,尤其命令行超级难用,而Linux自己必须得花不少时间在折腾中,更是不适合新手了,Max OS是我认为迄今为止最好用的系统,没有之一, 所以如果你不差钱的话,强烈建议入手一台Mac,推荐Pro系

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity