欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓在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());


希望有帮助,记得点赞哦,支持的动力

相关标签: 安卓 安卓