Android中Activity在跳转时传递实体类对象的实现(实体类含有布尔值)
2018-02-26 17:18
435 查看
实际开发中偶尔会有这样的需求,在Activity跳转的时候传递一个实体类对象。废话少说,直接演示源码。
其中实体类要实现Parcelable序列化接口,其实例可以从一个包中写入和恢复。实现Parcelable接口的类还必须有一个名为CREATOR的静态字段,它是实现Parcelable的对象。
实体类的模板大概就是这样:
好了直接演示我随意写的实体类:
主布局就一个跳转按钮:
MainActivity中代码:
传递对象时,我发现网上一些做法是将对象通过Bundle的putParcelable(key, value)方法存进Bundle对象里面,而后再将Bundle对象存进Intent里面进行传递。但是我发现Intent也有存储通过Parcelable序列化对象的方法:
没有深究有何不同,演示了一下可以就行,如有不妥的可以指正出来。
接下来继续,跳转后页面就一个显示文本:
FirstActivity的代码:
运行结果,跳转过后正常打印出对象:
其中实体类要实现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); } }
运行结果,跳转过后正常打印出对象:
相关文章推荐
- Android Activity跳转传递序列化实体类对象
- 借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口
- Activity跳转时传递Bitmap对象的实现
- 用Intent 对象实现两个(多个)Activity之间的跳转和参数传递
- 借助Intent实现Android工程中Activity之间Java对象的传递——实现Parcelable接口
- Android Activity之间实现数据(对象,对象集合)传递
- Activity跳转时传递Bitmap对象的实现
- 使用Intent对象来实现两个(或多个)Activity之间的跳转,并实现在Activity之间传递参数。
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- android(Activity之间的跳转及传递对象)
- android activity传递实体类对象
- Android 跳转Activity并通过Bundle对象传递数据
- Android实现intent跳转界面传递数据(2)——onActivityResult方法接收返回值
- Android 使用Intent实现Activity跳转和数据传递
- Android Activity中使用Intent实现页面跳转与参数传递的方法
- android初步实现Activity之间的跳转和数据传递
- Android 通过(Parcelable)序列化对象实现Activity间传递对象
- 利用Bundle实现Android Activity间消息的传递
- 利用Bundle实现Android Activity间消息的传递
- Android对象序列化(Activity之间传递对象,Parcelable小例子)