Activity之间的数据传递—实现Parcelable接口

一、单向传递数据和接收

1.可以传递数据类型

  • 传递基本数据类型、字符串和对应的数组
  • 传递Bundle(类似HashMap)
  • 传递对象数据
  • 传递Integer集合、String集合和parcelable集合

2.代码
1)传递和接收基本数据类型、字符串和对应数组

传递:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);                
                //建立数据
                int i = 1;
                String s = "hello";
                String[] strings = {"ab","cd","ef"};
                
                //传递数据
                intent.putExtra("int类型数据",i);
                intent.putExtra("String类型数据",s);
                intent.putExtra("String数组",strings);
                
                //跳转页面
                startActivity(intent);
                

接收:

                Intent intent = getIntent();

                //接收数据
                String getString = intent.getStringExtra("MainActivity传来的String类型数据");
                
                //如果没接收到则返回设置的默认值
                int getInt = intent.getIntExtra("MainActivity传来的int类型数据",0);
                String[] stingArr = intent.getStringArrayExtra("MainActivity传来的String数组");


            
                

2)传递和接收Bundle

传递:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                
                //创建bundle
                Bundle bundle = new Bundle();

                //建立数据
                int i = 1;
                String s = "hello";
                String[] strings = {"ab","cd","ef"};

                //把数据封装到bundle中
                //这里的bundle也可以存放对象数据
                bundle.putInt("int",i);
                bundle.putString("String",s);
                bundle.putStringArray("StringArr",strings);
               
                //传递bundle
				intent.putExtra("bundle",bundle);
                //跳转页面
                startActivity(intent);
                
                

接收:

                Intent intent = getIntent();

                //接收Bundle
                Bundle bundle = intent.getBundleExtra("bundle");

                //取出Bundle封装的数据
                int i = bundle.getInt("int");
                String s = bundle.getString("String");
                String[] strings = bundle.getStringArray("StringArr");
     

                

3)传递和接收对象数据
注意:所传递的对象必须实现Serializable接口或者Parcelable接口

传递实现Serializable接口的对象:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);

                //建立对象
                //注意这里的对象必须实现Serializable接口或者Parcelable接口
                //这里的User类实现的Serializable接口
                User user1 = new User(10,"kll",1001);
                User user2 = new User(11,"momo", 1002);
                

                //传递对象
                intent.putExtra("user1",user1);
                intent.putExtra("user2",user2);
                
                //跳转页面
                startActivity(intent);
                
                

接收实现Serializable接口的对象:

                Intent intent = getIntent();

                //接收User对象数据
                User user1 = (User)intent.getSerializableExtra("user1");
                User user2 = (User)intent.getSerializableExtra("user2");
                

注:实现Serializable接口方法很简单,只需要在类后面implements Serializable即可!

扫描二维码关注公众号,回复: 11135513 查看本文章

传递实现Parcelable接口的对象:

                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                
                //建立实现类Parcelable接口的对象
                Pet petDog = new Pet("白菜",3);
                Pet petCat = new Pet("地雷",2);
                
                //传递对象数据
                intent.putExtra("宠物狗白菜",petDog);
                intent.putExtra("宠物猫地雷",petCat);
                
                //跳转页面
                startActivity(intent);
                

接收实现Parcelable接口的对象:

                Intent intent = getIntent();

                //接收Pet对象数据
                Pet pet1 = intent.getParcelableExtra("宠物狗白菜");
                Pet pet2 = intent.getParcelableExtra("宠物猫地雷");
                

注:实现Parcelable接口的方式有点复杂,下面开始介绍一个类实现Parcelable接口的方式!

实现Parcelable接口的方式

1.要点:

  • 让类实现Parcelable接口
  • 然后实现接口中的describeContents和writeToParcel方法
  • 要建立一个形参为Parcel的构造器
  • 实例化一个CREATOR常量对象

详细介绍传送门:https://blog.csdn.net/u012702547/article/details/47151001

2.代码

public class Pet implements Parcelable {
    private String name;
    private int age;

    /*
    * 1.先让类实现Parcelable接口
    * 2.实现接口中的describeContents和writeToParcel方法
    * */

    //默认返回0即可
    @Override
    public int describeContents() {
        return 0;
    }

    //这里写入对象属性的顺序要与下面读的顺序一致!
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);

    }
    public Pet(Parcel source) {
        name = source.readString();
        age = source.readInt();
    }

    //实例化一个CREATOR
    public static final Creator<Pet> CREATOR = new Creator<Pet>() {

        //这里返回要求返回new Pet(source)
        @Override
        public Pet createFromParcel(Parcel source) {
            return new Pet(source);
        }

        //这里把0改成size即可
        @Override
        public Pet[] newArray(int size) {
            return new Pet[size];
        }
    };

二、小结

1.无论是传递基本数据类型、数组、字符串、对象,都是putExtra输入键值对即可
2.接收数据的方式要根据你传递的数据来定

发布了7 篇原创文章 · 获赞 0 · 访问量 1700

猜你喜欢

转载自blog.csdn.net/k909397116/article/details/105756889