安卓在Activity跳转过程中传递实体类对象的实现-------parcel
程序员文章站
2022-04-15 18:44:43
...
**Parcel的简介
Parcel是什么?Parcel翻译过来是打包的意思,其实就是包装了我们需要传输的数据,然后在Binder中传输,也就是用于跨进程传输数据
简单来说,Parcel提供了一套机制,可以将序列化之后的数据写入到一个共享内存中,其他进程通过Parcel可以从这块共享内存中读出字节流
**以下是用其完成实体类的传输
1.其中实体类要实现Parcelable序列化接口,其实例可以从一个包中写入和恢复。实现Parcelable接口的类还必须有一个名为CREATOR的静态字段,它是实现Parcelable的对象。
如下:
package com.example.phonemessage;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by Administrator on 2019/10/4.
*/
public class Fruit implements Parcelable {
//基本需要
private String name;
private int imageId;
public Fruit(String name,int imageId){
this.name=name;
this.imageId=imageId;
}
public String getName(){
return name;
}
public int getImageId(){
return imageId;
}
//parcelable需要
protected Fruit(Parcel in) {
name = in.readString();
imageId = in.readInt();
}
public static final Creator<Fruit> CREATOR = new Creator<Fruit>() {
@Override
public Fruit createFromParcel(Parcel in) {
return new Fruit(in);
}
@Override
public Fruit[] newArray(int size) {
return new Fruit[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {//
**这里必须要写,否则穿不过去**
dest.writeString(name);
dest.writeInt(imageId);
}
}
2.然后在需要传送的地方传送
Fruit fruit = (Fruit) fruitList.get(position);//实体类
Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,apple.class);
intent.putExtra("Extra_data", fruit);//传送
startActivity(intent);
3.在接收界面接收
fruit中有一个imageview,一个textview
Fruit fruit= (Fruit) getIntent().getExtras().get("Extra_data");//接收
ImageView imageView=findViewById(R.id.image_chaye);
TextView textView = findViewById(R.id.text_chaye);
imageView.setBackgroundResource(fruit.getImageId());
Log.d(fruit.getName(), "check: ");
textView.setText(fruit.getName());
希望有帮助,记得点赞哦,支持的动力
上一篇: kotlin基础(二)
下一篇: kotlin基础(三)