1. Todos los códigos
Actividad principal:
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>
Clase de usuario:
/**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. Pasos
- Cree dos actividades para implementar la función de salto:
- Función de salto, de hecho, funcionamiento normal con salto.
User user = new User();
user.setAge(100);
user.setName("sunweiaho");
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("data",user);
startActivity(intent);
- Código clave: como arriba
Otra forma rápida de escribir beans, use complementos: Parcelable
Paso 1: Alt + insertar para abrir la siguiente interfaz y luego seleccione
Paso 2:
Escriba los métodos de obtención y configuración y el método toString para completar
todo el código:
/**
* @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. Problema y clave:
Comparado con serializable, parcelable tiene un alto rendimiento, pero es más complicado de usar