Android中Activity在跳转时传递实体类对象的实现(实体类含有布尔值)

实际开发中偶尔会有这样的需求,在Activity跳转的时候传递一个实体类对象。废话少说,直接演示源码。

其中实体类要实现Parcelable序列化接口,其实例可以从一个包中写入和恢复。实现Parcelable接口的类还必须有一个名为CREATOR的静态字段,它是实现Parcelable的对象。

实体类的模板大概就是这样:

 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

好了直接演示我随意写的实体类:

/**
 * Created by Layne_Yao on 2018-2-26 下午4:27:00.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
public class Person implements Parcelable {
    private String name;
    private int age;
    private String sex;
    private boolean isMarry;

    public Person(String name, int age, String sex, boolean isMarry) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.isMarry = isMarry;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public boolean isMarry() {
        return isMarry;
    }

    public void setMarry(boolean isMarry) {
        this.isMarry = isMarry;
    }

    public Person(Parcel in) {
        name = in.readString();
        age = in.readInt();
        sex = in.readString();
        //将byte再转化回布尔值
        isMarry = in.readByte() != 0;
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeString(sex);
        //布尔值这里是将之转化成byte进行序列化
        dest.writeByte((byte) (isMarry ? 1 : 0));

    }

}

主布局就一个跳转按钮:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.itman.skipdemo.MainActivity" >

   <Button
       android:id="@+id/btnSkip"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
       android:layout_centerVertical="true"
       android:text="跳转" />

</RelativeLayout>

MainActivity中代码:

public class MainActivity extends ActionBarActivity {
    private Button btnSkip;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSkip = (Button) findViewById(R.id.btnSkip);

        btnSkip.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Person person = new Person("Yorkie", 18, "female", false);
                Intent intent = new Intent(MainActivity.this,
                        FirstActivity.class);
                intent.putExtra("person", person);
                startActivity(intent);

            }
        });

    }

}

传递对象时,我发现网上一些做法是将对象通过Bundle的putParcelable(key, value)方法存进Bundle对象里面,而后再将Bundle对象存进Intent里面进行传递。但是我发现Intent也有存储通过Parcelable序列化对象的方法:
这里写图片描述
没有深究有何不同,演示了一下可以就行,如有不妥的可以指正出来。

接下来继续,跳转后页面就一个显示文本:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.itman.skipdemo.FirstActivity" >

    <TextView
        android:id="@+id/tvContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/hello_world"
        android:textSize="25sp" />

</RelativeLayout>

FirstActivity的代码:

public class FirstActivity extends ActionBarActivity {
    private TextView tvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        tvContent = (TextView) findViewById(R.id.tvContent);

        Person person = (Person) getIntent().getExtras().get("person");
        String info = "姓名:"+person.getName()+"\n年龄:"+person.getAge()+"\n性别:"+person.getSex()+"\n婚姻状况:"+person.isMarry();
        tvContent.setText(info);
    }

}

运行结果,跳转过后正常打印出对象:
这里写图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值