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 CREATOR = new Creator() {        @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 persons=new ArrayList<>();        persons.add(person1);        persons.add(person2);        persons.add(person3);        //传递对象集合        intent.putParcelableArrayListExtra("persons",persons);


 ThinkActivity.java

 

 

        //接收对象集合        List persons=getIntent().getParcelableArrayListExtra("persons");        for (Person person : persons) {            tv_think_showName.setText(tv_think_showName.getText()+" "+persons.toString());//将对象集合设置到文本域        }

 

 

 

 

 

 

 

更多相关文章

  1. 安全新手入坑——HTML标签
  2. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  3. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  4. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  5. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  6. android 访问WebService
  7. Android自学笔记-10-Sqlite的简单使用
  8. javascript根据字符串创建Date对象,在ios和android中行为不一致
  9. Android(安卓)Jetpack-Room数据库简单使用

随机推荐

  1. 应对“角色爆炸”,PBAC 真香!
  2. 2、AP上线的那些事儿(1)capwap建立过程、设
  3. 量子通讯扫盲
  4. 交互式分析技术
  5. 并行数据库技术分析与展望
  6. Hadoop二次开发环境构建
  7. c语言学习打卡 自定义函数
  8. 2021-03-16:手写代码:单链表归并排序。
  9. rpm包管理 yum包管理与编译安装
  10. Spark源码系列之Standalone模式下Spark应