0
点赞
收藏
分享

微信扫一扫

Parcelable传递对象实例

王远洋 2022-05-26 阅读 66

package com.derry.simplestudy.simple04;

import android.os.Parcel;
import android.os.Parcelable;

// JVM平台 Java开发 Serializable

// TODO 推荐的方式 Android 必须使用 Parcelable,因为这个是支持 兼容 安卓虚拟机 比Serializable 性能高很多
// 此对象成为 Parcelable 的子类,就具备传递的资格
public class Student implements Parcelable {

public Student(){}

// 我们自己定义的成员
public String name;
public int age;

// TODO 注意: 读取的顺序 和 写入的顺序 必须一致,否则报错

// MainActivity2 后读取
// 从Parcel对象里面读出来 赋值给成员
// 构造函数
protected Student(Parcel in) {
// 从Parcel对象里面读取成员 赋值给 name age
name = in.readString();
age = in.readInt();
}

// MainActivity1 先写入
// 把属性写入到 Parcel 对象里面去
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}

// 先不管,是系统扩展用的
@Override
public int describeContents() {
return 0;
}

// CREATOR 一定要有 自动生成/从文档里面复制,不需要自己写
public static final Creator CREATOR = new Creator() {

// 创建Student对象 并且 Parcel构建好,传递给我们的Student(成员数据就可以从Parcel对象获取了)
@Override
public Student createFromParcel(Parcel in) {
return new Student(in);
}

@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
}

package com.derry.simplestudy.simple04;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.derry.simplestudy.R;

public class MainActivity1 extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main1);
}

/**
* 跳转到 MainActivity2 并传递 对象过去
* @param view
*/
public void startAction(View view) {
Intent intent = new Intent(this, MainActivity2.class);

Student student = new Student();
student.name = "DerryOK";
student.age = 33;

// 传递对象 -- 让intent 携带过去
intent.putExtra("student", student);

startActivity(intent);
}
}

package com.derry.simplestudy.simple04;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.derry.simplestudy.R;

public class MainActivity2 extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

Intent intent = getIntent();

Student student = intent.getParcelableExtra("student");

// 显示 MainActivity1 传递过来的对象 里面的数据
Toast.makeText(this, "student.name:" + student.name
+ " student.age:" + student.age , Toast.LENGTH_SHORT).show();
}
}


举报

相关推荐

0 条评论