1. 程式人生 > >Android Activity之間實現資料(物件,物件集合)傳遞

Android Activity之間實現資料(物件,物件集合)傳遞

Android Activity之間實現資料傳遞是一項非常重要的技術,今天我就來講一講如何實現資料傳遞:

1.基本資料傳遞

MainActivity.java

        Intent intent=new Intent(this,ThinkActivity.class);//ThinkActivity.class引數是你需要將資料傳遞的目標頁面
        //傳遞基本資料型別
        intent.putExtra("uname","張三");
        intent.putExtra("uage",18);

ThinkActivity.java(接收資料頁面)
        String uname=getIntent().getStringExtra("uname");//接收MainActivity傳遞過來的資料
        int uage=getIntent().getIntExtra("uage",0);//引數0是當uage為null時uage的預設值為0

當然,這適用於資料不多的情況,如果一個頁面資料量較大,用上面的方式就有點麻煩了,下面我們將一個新的方式

 MainActivity.java

        //傳遞Bundle(集裝箱),將我們需要傳遞的資料全部放入集裝箱,然後直接將集裝箱傳遞到目標頁面
        Bundle bundle=new Bundle();
        bundle.putString("uname","張三");
        bundle.putInt("uage",18);
        intent.putExtra("bundle",bundle);

ThinkActivity.java(接收資料頁面)
        //接收bundle
        Bundle bundle=getIntent().getBundleExtra("bundle");
        String uname=bundle.getString("uname");
        int uage=bundle.getInt("uage");


2.傳遞物件

 我們先新建一個實體類Person.java,因為Android在進行物件傳遞的時候需要序列化,所以實體類需要先實現Parcelable介面,並且重寫其中的方法

Person.java

package com.zhangkai.entity;

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

/**
 * Created by Administrator on 2017/6/16 0016.
 */

public class Person implements Parcelable{

    private int pid;
    private String pname;
    private int page;

    public Person(){

    }

    //將物件屬性反序列化然後讀取出來,注意屬性的順序必須按照序列化屬性的順序
    protected Person(Parcel in) {
        pid = in.readInt();
        pname = in.readString();
        page = in.readInt();
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    //將物件屬性進行序列化
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(pid);
        dest.writeString(pname);
        dest.writeInt(page);
    }

    public Person(int pid, String pname, int page) {
        this.pid = pid;
        this.pname = pname;
        this.page = page;
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    @Override
    public String toString() {
        return "Person{" +
                "pid=" + pid +
                ", pname='" + pname + '\'' +
                ", page=" + page +
                '}';
    }
}

MainActivity.java
        //傳遞物件
        Person person1=new Person(1,"李四",19);
        intent.putExtra("persons",person1);

ThinkActivity.java
        //接收物件
        Person person=getIntent().getParcelableExtra("persons");
        tv_think_showName.setText(person.toString());

3.傳遞物件集合

 MainActivity.java

        Person person1=new Person(1,"靜靜",19);
        Person person2=new Person(2,"明明",19);
        Person person3=new Person(3,"雷雷",19);

        ArrayList<Person> persons=new ArrayList<>();
        persons.add(person1);
        persons.add(person2);
        persons.add(person3);
        //傳遞物件集合
        intent.putParcelableArrayListExtra("persons",persons);

 ThinkActivity.java
        //接收物件集合
        List<Person> persons=getIntent().getParcelableArrayListExtra("persons");
        for (Person person : persons) {
            tv_think_showName.setText(tv_think_showName.getText()+" "+persons.toString());//將物件集合設定到文字域
        }