Activity值对象传递
来源:互联网 发布:描述淘宝店铺的句子 编辑:程序博客网 时间:2024/05/01 10:07
所谓值对象:即自定义的有数据类型的数据对象
示例:多个Activity之间传递值对象,传递一个People对象
①启动Android Studio,新建一个项目:TransferValuesObject
②在主Activity的布局文件中,加入Button
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动另一个Activity" android:id="@+id/btnStartBAty"/></RelativeLayout>③在程序里创建一个Blank Activity(BAty)
④给BAty的布局文件中TextView设置一个ID
android:id="@+id/tv"
Serializable是java语言所内置的用于序列化对象的一个接口,Parcelable是Android平台给提供用于序列化的对象接口
A.Serializable方式序列化
在java程序中,创建一个自定义的People对象,生成set,get方法
package com.jerry.demo.transfervaluesobject;import java.io.Serializable;/** * Created by Blade on 2015/4/28. */public class People implements Serializable{ //People中有name,age两个成员 String name; int age; //生成set,get方法 public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } //构造一个People方法 public People(String name,int age){ this.name = name; this.age = age; }}在MainActivity.java的程序中,创建一个事件监听器,绑定启动的BAty这个Activity,并传入People对象(在MainActivity.java的程序中onCreate方法中加入代码)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,BAty.class); i.putExtra("people",new People("andy rubin",52));//传入people对象 startActivity(i); } }); }在BAty.java的程序中,获取传入的people对象,并让TextView呈现出获取到的对象值
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_baty); Intent i = getIntent(); tv = (TextView) findViewById(R.id.tv); //获取people对象 People people = (People) i.getSerializableExtra("people"); tv.setText(String.format("People info(name = %s,age = %d)",people.getName(),people.getAge())); }启动另一个Activity,传递结果
B.Parcelable序列化方法
Parcelable是Android专门面向移动平台的序列化方法,Parcelable没有全自动的序列化机制,需要我们手动添加数据
在java程序中,创建一个自定义的People对象,生成set,get方法
package com.jerry.demo.transfervaluesobject;import android.os.Parcel;import android.os.Parcelable;import java.io.Serializable;/** * Created by Blade on 2015/4/28. */public class People implements Parcelable{ //People中有name,age两个成员 String name; int age; //生成set,get方法 public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } //构造一个People方法 public People(String name,int age){ this.name = name; this.age = age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { //保存数据,方便用于传递给其他的程序或者其他的组件 dest.writeString(getName()); dest.writeInt(getAge()); } public static final Creator<People> CREATOR = new Creator<People>() { @Override //通过Parcel创建对象 public People createFromParcel(Parcel source) { return new People(source.readString(),source.readInt()); } @Override public People[] newArray(int size) { return new People[size]; } };}在MainActivity.java的程序中,创建一个事件监听器,绑定启动的BAty这个Activity,并传入People对象(在MainActivity.java的程序中onCreate方法中加入代码)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,BAty.class); i.putExtra("people",new People("andy rubin",52));//传入people对象 startActivity(i); } }); }在BAty.java的程序中,获取传入的people对象,并让TextView呈现出获取到的对象值
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_baty); Intent i = getIntent(); tv = (TextView) findViewById(R.id.tv); //获取people对象 People people = i.getParcelableExtra("people");//和Serializable的获取方式不同 tv.setText(String.format("People info(name = %s,age = %d)",people.getName(),people.getAge())); }总结:使用Serializable和Parcelable两种方式传递值对象,其中使用Serializable方式,操作简单,序列化的操作由系统完成,速度比较慢;Parcelable方式,操作复杂,速度快,效率高
0 0
- Activity值对象传递
- Activity之间传递参数之值对象
- activity间传递对象
- Activity 传递 List对象
- activity之间传递对象
- android activity传递对象
- activity之间传递对象
- Activity之间传递对象
- Activity传递对象
- Activity传递Bitmap对象
- Activity之间传递类对象
- Activity之间的 对象传递
- Activity之间传递类对象
- Activity间如何传递对象
- Activity之间传递类对象
- Activity之间传递类对象
- Android Activity 之间传递对象
- android Activity之间传递对象
- 11729 - Commando War
- 【pintos学习笔记】(1)pintos配置
- linux编译gcc-5.1.0
- URAL 1796Amusement Park
- 通过Graph API上传 Video
- Activity值对象传递
- Objective C基础(二)
- 解决ssh链接服务器超时自动断开的问题
- 错误类型:android.content.res.Resources$NotFoundException:String resource ID #0x86
- Lua_单点触摸
- 蓝桥杯:买不到的数目
- Cookie类,基本上算是完善了!
- Lua_多点触摸
- 剑指offer面试题3-二维数组中的查找