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
原创粉丝点击