Android学习总结——Activity之间传递参数
一.在 Activity 之间传递简单数据
二.在 Activity 之间传递复杂数据
三.在 Activity 之间传递自定义值对象
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
//加入参数,传递给AnotherActivity
intent.putExtra("data","我是传过来的参数");
startActivity(intent);
getIntent().getStringExtra("data");
二.在 Activity 之间传递复杂数据
传递数据包Bundle
Intent intent=new Intent(MainActivity.this,AnotherActivity.class); Bundle b=new Bundle();
b.putString("name","小明");
b.putInt("age",);
b.putChar("sex",'男'); intent.putExtras(b);
startActivity(intent);
获取数据包Bundle
Intent i=getIntent();
Bundle data=i.getExtras(); TextView tv=(TextView)findViewById(R.id.tv);
tv.setText(String.format("name="+data.getString("name")+",age="+data.getInt("age")+",sex="+data.getChar("sex")+",score="+""));
三.在 Activity 之间传递自定义值对象
所谓的值对象就是自定义的有数据类型的对象,在实际使用当中传递值对象比较实用,所以这里我将着重总结一下这里。
我们新建一个数据类型Student:
这里实现了Serializable这个接口,下文中将详细讲解。
public class Student implements Serializable{
private String name;
private String sex;
private int age; 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 getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Student(String name,String sex,int age){
this.name=name;
this.sex=sex;
this.age=age;
}
}
当不实现这个接口,直接把数据传给Intent时,会提示出错。
这里有两种解决的方法,一种是让Student实现java内置的用于序列化的一个接口Serializable,另一种是Android提供的用于序列化的一个接口Parcelable,下面我们一个一个来看:
1.首先让Student implements Serializable接口:
主Activity中:
intent.putExtra("Student",new Student("小明","男",20));
目标Activity中:
Intent i=getIntent();
Student student= (Student) i.getSerializableExtra("Student");
//如下方式即可获取Student的属性值
String name=student.getName();
String sex=student.getSex();
int age=student.getAge();
这个方法效率比较低,所以Android提供了一个专门用于序列化的接口Parcelable,下面就来简单说说这个接口。
2.Parcelable接口
当实现这个接口之后要求我们实现这两个方法,so,实现就好。
这里需要我们手动的去写这些个东东,这是因为它没有全自动化去序列的机制。
public class Student implements Parcelable {
private String name;private int age; 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 Student(String name,int age){
this.name=name;
this.age=age;
} @Override
public int describeContents() {
return ;
} @Override
public void writeToParcel(Parcel parcel, int i) {
//将这两条数据保存起来用于方便传递
parcel.writeString(getName());
parcel.writeInt(getAge());
} public static final Creator<Student> CREATOR=new Creator<Student>() {
@Override
public Student createFromParcel(Parcel parcel) {
return new Student(parcel.readString(),parcel.readInt());
} @Override
public Student[] newArray(int i) {
return new Student[i];
}
};
}
主Activity中:
intent.putExtra("Student",new Student("小明",));
目标Activity中:
Intent i=getIntent();
Student student=i.getParcelableExtra("Student");
//如下方式即可获取Student的属性值
String name=student.getName();
String sex=student.getSex();
int age=student.getAge();
就这两种接口而言,Parcelable接口更快,但是很多地方需要自己写,对于像我这样的新手菜鸟来说消化它也是够费劲的,希望有大神能给点Android学习路上的经验和建议!!
Android学习总结——Activity之间传递参数的更多相关文章
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
- Android学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...
- Activity之间传递参数(四)
--------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...
- 在Activity之间传递参数(四)
获取Activity的返回参数(在参数(三)User的例子的基础上实现): 1.activity_the_aty.xml文件:<EditText android:id="@+id/ed ...
- Activity之间传递参数(三)
------siwuxie095 传递值对象,即自定义的有数据类型的对象 1.首先 new 一个 class:User,用于创建自定义对象,同时右键 Generate 出 Constructor.se ...
- Activity之间传递参数(二)
------siwuxie095 传递数据包 1.传递数据包要用到Bundle,MainActivity.java中: package com.siwuxie095.sendargs; import ...
- Activity之间传递参数(一)
-------siwuxie095 传递简单数据 (1)首先创建一个项目:SendArgs (2)选择API:21 Android 5.0 (3)选择 Empty Activity (4)默认 (5) ...
- 在Activity之间传递参数(一)
准备: 一.创建主界面:activity_main.xml文件中<Button android:text="启动另一个Activity" android:id="@ ...
- 在Activity之间传递参数(三)——serializable和parcelable的区别
传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...
随机推荐
- UESTC_How many good substrings CDOJ 1026
Icerain likes strings very much. Especially the strings only consist of 0 and 1,she call them easy s ...
- 基于引擎的matlab+vc混合编程的配置
前段时间在项目中做了一些关于基于引擎的vc+matlab混合编程的工作. 如果你是混合编程新手,我相信使用引擎的方式编程是比较简单快捷的一种方式. 当然这种方法也有其缺点,就是不能脱离matlab运行 ...
- 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇
关键词:android 电池 电量计 PL2301任务初始化宏 power_supply 中断线程化 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 ...
- C/C++ 笔试、面试题目大汇总 转
C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...
- CentOS 5.7 中文乱码问题解决方案
一.安装中文支持: # yum install "@Chinese Support" 二.用 yum 安装中文字体 #yum install fonts-chinese.noarc ...
- 禁掉a链接的几种方法
这次遇到链接 先留着 但不能有任何作用的需求 ,我只能说顾客的需求真是多种多样,奇奇怪怪啊 啊啊啊啊啊啊啊啊啊啊啊 我用span代替了a 标签,但是后来想想维护起来可能不太方便 所以上网查资料, ...
- Android混淆配置文件规范
#打开project.properties文件中的proguard.config. -optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassna ...
- 导出Eclipse环境配置
第一种方法: Eclipse的 File -> Export(导出), 在窗口中展开 General(常规) -> Perferences(首选项)-->Export all(全部导 ...
- MVC调试异常--未能将脚本调试器附加到计算机
32位机: 解决办法:以管理员身份打开CMD,运行:regsvr32.exe "%ProgramFiles(x86)%\Common Files\Microsoft Shared\VS7De ...
- Python和C#基本算法实现对比
最近在学习python,很多入门的例子又写了一遍,基本上是C#和Python都写了一遍,对比发现语言真是相通啊,只是语法不同而已. python开发也是用的VS,很好用,特别是代码段运行,选中一段py ...