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

三、注意

使用以上方法传递对象时,都是创建了新的实例,而非传递对象的引用,如果是传递引用,也就无需序列化了。

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