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

Android中Intent传递对象的两种方法------Serializable传值和Parcelable传值

2015-11-01 21:17 639 查看
 Android中Intent传递对象的两种方法的实现:

废话不多说,下面就上代码,我们通过代码来了解两种传值的不同之处:

第一步:新建一个工程,在activity.xml文件中添加如下代码(两个按钮,):

<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">

<Button
android:id="@+id/btn_parcelable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/btn_serializable"
android:layout_marginLeft="91dp"
android:layout_marginTop="37dp"
android:text="Parcelable" />

<Button
android:id="@+id/btn_serializable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/btn_parcelable"b( ̄▽ ̄)d
android:layout_marginTop="156dp"
android:text="Serializable" />

</RelativeLayout>


第二步:然后在MainActivity.class中添加如下代码:

说明:为了让大家多了解点开源项目,此处使用了xUtils的注入工具,简化了一些代码(其实此处用xUtils很不合适,应该用butter knife等注解工具,正好有一个XUtils包,就拿来用了o( ̄▽ ̄)d)

public class MainActivity extends Activity {

public static final String SERIALIZ_TAG = "mySerializable";
public static final String PARCEL_TAG = "myParcelable";

@ViewInject(R.id.btn_serializable)
Button mSerializable;
@ViewInject(R.id.btn_parcelable)
Button mParcelable;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewUtils.inject(this);
}

/**
* Serializable传值
*
* @param v
*/
@OnClick(R.id.btn_serializable)
public void SerializableTran(View v) {
Person mPerson = new Person();
mPerson.setName("雷军");
mPerson.setAge(43);
Intent mIntent = new Intent(this, SecondActivity.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(SERIALIZ_TAG, mPerson);
mIntent.putExtras(mBundle);
startActivity(mIntent);
}

/**
* Parcelable传值
*
* @param v
*/
@OnClick(R.id.btn_parcelable)
public void parcelableTran(View v) {
Book mBook = new Book();
mBook.setTitle("草样年华");
mBook.setAuthor("孙睿");
mBook.setPublishTime(2004);
Intent mIntent = new Intent(this, ThirdActivity.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable(PARCEL_TAG, mBook);
mIntent.putExtras(mBundle);
startActivity(mIntent);
}

}
第三步:新建两个Activity,用于接收并显示传过去的值

SecondActivity.class

public class SecondActivity extends Activity{

@ViewInject(R.id.tv_disinfo)
TextView mDisinfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_disinfo);
ViewUtils.inject(this);
initView();
}

private void initView() {
Person mPerson=(Person)getIntent().getSerializableExtra(MainActivity.SERIALIZ_TAG);
mDisinfo.setText("姓名:"+mPerson.getName()+"\t 年龄:"+mPerson.getAge());
}

}


ThirdActivity.class

public class ThirdActivity extends Activity{

@ViewInject(R.id.tv_disinfo)
TextView mDisinfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_disinfo);
ViewUtils.inject(this);
initView();
}

private void initView() {
Book mBook=(Book)getIntent().getParcelableExtra(MainActivity.PARCEL_TAG);
mDisinfo.setText("书名:"+mBook.getTitle()+"\t 作者:"+mBook.getAuthor()+"\t 出版时间:"+mBook.getPublishTime());
}

}




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