Android Activity之間實現資料(物件,物件集合)傳遞
阿新 • • 發佈:2019-01-24
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());//將物件集合設定到文字域
}