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

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

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值