您的位置:首页 > 移动开发 > Android开发

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

2018-02-26 17:18 435 查看
实际开发中偶尔会有这样的需求,在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);
}

}


运行结果,跳转过后正常打印出对象:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Activity传递对象