Android Activity之間傳遞類對象

一、簡介

開發過程中,Activity之間傳遞數據是必不可少的,Android中使用Intent和Bundle作爲數據載體,在Activity之間傳遞,對於基礎數據類型,Bundle已經提供了相關的put、set方法,而作爲自定義的類型則需要有特別的要求。

自定義類型,想要使用Bundle傳遞時,需要滿足特定的條件,即該類型需要實現Serializable接口或Parcelable接口。

注:如果目標對象中包含其他對象,則被包含的對象也需要實現Serializable接口或Parcelable接口。

二、代碼實現

我們以Serializable接口爲例:

1、傳遞對象

1)自定義對象,實現Serializable接口

package com.davis.drawtrangle;

import java.io.Serializable;

public class Person implements Serializable{
    
    private String name;
    private int age;

    public Person() {
    }

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

    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;
    }
}

2)使用Intent傳遞對象

	private void clearDrawView(){
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        Person person = new Person("admin", 1);
        Bundle bundle = new Bundle();
        bundle.putSerializable("person", person);
        intent.putExtras(bundle);
        startActivity(intent);
    }

3)獲取傳遞的數據

	private void init(){
        Person person = (Person)getIntent().getSerializableExtra("person");
        Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());
    }

2、傳遞對象集合

1)同上。

2)同上。

注:使用putSerializable()方法時,需要把List<>強轉成爲Serializable,並且集合中的成員都需要實現Serializable接口。

	private void clearDrawView(){
        Intent intent = new Intent(MainActivity.this, MainActivity.class);
        List<Person> lists = new ArrayList<Person>();
        Person person = new Person("admin", 1);
        lists.add(person);
        Bundle bundle = new Bundle();
        bundle.putSerializable("person", (Serializable) lists);
        intent.putExtras(bundle);
        startActivity(intent);
    }

3)同上。

注:不足之處在於,由於獲取數據時候,需要把Serializable強轉成爲對應的List<>,此處會有警告。

	private void init(){
        List<Person> lists = (List<Person>)getIntent().getSerializableExtra("person");
        for(int i=0;i<lists.size();i++) {
            Person person = lists.get(i);
            Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());
        }
    }

三、注意

使用以上方法傳遞對象時,都是創建了新的實例,而非傳遞對象的引用,如果是傳遞引用,也就無需序列化了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章