1.全部代码
MainActiviy:
java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private Button mBtIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBtIntent = (Button) findViewById(R.id.bt_intent);
mBtIntent.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_intent:
User user = new User();
user.setAge(100);
user.setName("sunweiaho");
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("data",user);
startActivity(intent);
break;
}
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/bt_intent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity2:
java:
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent = getIntent();
Parcelable data = intent.getParcelableExtra("data");
Toast.makeText(this, data.toString(), Toast.LENGTH_SHORT).show();
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
</androidx.constraintlayout.widget.ConstraintLayout>
User类:
/**parcelable它的效率比serializable效率要高,
* parcelable写上面就序列化上面的,而serializable则把对象的都序列化出去
* @ClassName User
* @Description TODO
* @Author ${孙伟豪}
* @Date 2020/10/28 14:12
* @Version 1.0
*/
public class User implements Parcelable {
private String name;
private int age;
//内容描述,用不到默认返回0即可
@Override
public int describeContents() {
return 0;
}
public User() {
}
protected User(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
//用于对象的序列化
@Override
public void writeToParcel(Parcel dest, int flags) {
//将那么和age属性序列化出去
dest.writeString(this.name);
dest.writeInt(this.age);//注释这里与下面的,就不会序列化了
}
//用于反序列化
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
//反序列化的核心方法
@Override
public User createFromParcel(Parcel source) {
// return new User(source);
User user=new User();
//下面读取是靠顺序的
user.setName(source.readString());
user.setAge(source.readInt());//注释这里与上面的,就不会序列化了
return user;
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.步骤
- 创建两个activity,实现跳转功能:
- 跳转功能,其实跟跳转正常操作
User user = new User();
user.setAge(100);
user.setName("sunweiaho");
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("data",user);
startActivity(intent);
- 关键代码:就上面那样
bean的另一种快速写法,使用插件:Parcelable
步骤一:alt+insert打开如下界面,然后选择
步骤二:
写getter和setting方法与toString方法,这样就完成了
全部代码:
/**
* @ClassName User2
* @Description TODO
* @Author ${孙伟豪}
* @Date 2020/10/28 16:48
* @Version 1.0
*/
public class User2 implements Parcelable {
private String name;
private int age;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.age);
}
public User2() {
}
protected User2(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
public static final Parcelable.Creator<User2> CREATOR = new Parcelable.Creator<User2>() {
@Override
public User2 createFromParcel(Parcel source) {
return new User2(source);
}
@Override
public User2[] newArray(int size) {
return new User2[size];
}
};
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;
}
@Override
public String toString() {
return "User2{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3.问题与关键:
parcelable与serializable相比,性能高,但是使用比较复杂