Android Activity之间实现数据(对象,对象集合)传递

本文详细介绍了在Android中如何实现Activity之间的数据传递,包括基本数据、对象以及对象集合的传递方法,涉及Intent使用及Parcelable接口的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());//将对象集合设置到文本域
        }

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值