安卓在Activity跳转过程中传递实体类对象的实现-------parcel

**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());


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

发布了46 篇原创文章 · 获赞 12 · 访问量 1591

猜你喜欢

转载自blog.csdn.net/weixin_43605701/article/details/103931270
今日推荐