Tears_fg

导航

Android_Intent_passObject

方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象
需要考虑对Person对象进行序列化

MainActivity:

package com.example.day06_activity4;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void btn_click(View view) {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, OtherActivity.class);
        // 创建一个Person对象,并通过intent传递到OtherActivity
        Person person = new Person("志明", 40, 333.3);
        intent.putExtra("person", person);
        startActivity(intent);
    }
}

OtherActivity:

package com.example.day06_activity4;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class OtherActivity extends Activity {
    private TextView textview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        textview = (TextView) findViewById(R.id.text);
        // 获得intent
        Intent intent = getIntent();
        Person person = intent.getParcelableExtra("person");
        String name = person.getName();
        int age = person.getAge();
        double weight = person.getWeight();
        
        textview.setText("姓名:" + name + ", 年龄:" + age + ", 体重:" + weight);
    }


}

Person

package com.example.day06_activity4;

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

public class Person implements Parcelable {

    private String name;
    private int age;
    private double weight;

    public Person() {
    }

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

    // getXxx()方法和setXxx()方法
    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 double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    // 实现Parcelable接口中的抽象方法
    // describeContents()方法基本上直接返回0,就可以了
    public int describeContents() {
        return 0;
    }
    // 把需要序列化的参数写入out中
    public void writeToParcel(Parcel out, int flags) {
        out.writeString(name);
        out.writeInt(age);
        out.writeDouble(weight);
    }
    // 定义一个静态的属性CREATOR 是Parcelable.Creator的对象
    // 在该匿名内部类中,实现Parcelable.Creator中的两个方法(泛型参数为类名)
    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
        // createFromParcel(Parcel in)
        // 对in进行反序列化(需要通过Person的构造器实现)
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }
        // newArray(Parcel in)
        // 反序列化多个元素时使用
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
    // 定义私有的构造器 从in中反序列对应的参数(反序列化参数的顺序必须与序列化参数的顺序保持一致)
    private Person(Parcel in) {
        name = in.readString();
        age = in.readInt();
        weight = in.readDouble();
    }
}

 

posted on 2016-06-07 10:54  Tears_fg  阅读(221)  评论(0编辑  收藏  举报