Activity传递对象的方法

Android中通过Intent传递对象类型的方法有两种,一种是Bundle.putSerializable(Key,Object),另一种是Bundle.putParcelable(Key,Object).传递这些对象要满足一定的条件,前者是实现Serializable接口,后一种是实现了Parcelable.

本文的例子是Parcelable接口的方法。

Parcelable需要实现三个函数:writeToParcel、describeContents和CREATOR.

wroteToParcel(Parcel dest,int flags)将需要数列化存储的数据写入外部提供的Parcel对象dest.

describeContent()描述值类型,直接返回0即可

static final Parcelable.Creator 对象 CREATOR:这个CREATOR命名是固定的,而它对应的接口有两个方法必须实现,createFromPrcel(Parcel source)实现从source创建出JavaBean实例的功能;newArray(int size)创建该类长度的数组。

实现Parcelable接口,代码如下:

package com.activity.transfer;
import android.os.Parcel;
import android.os.Parcelable;
public class ParcelableTest implements Parcelable
{
 private String string1;
 private String string2;
 @Override
 public int describeContents() {
  // TODO Auto-generated method stub
  return 0;
 }
 @Override
 public void writeToParcel(Parcel arg0, int arg1) {
  // TODO Auto-generated method stub
  arg0.writeString(string1);
  arg0.writeString(string2);
 }
 
 public void setString1Value(String str1)
 {
  this.string1 = str1;
 }
 public String getString1Value()
 {
  
  return this.string1;
 }
 
 public void setString2Value(String str2)
 {
  this.string2 = str2;
 }
 public String getString2Value()
 {
  
  return this.string2;
 }
 public static final Parcelable.Creator<ParcelableTest> CREATOR = new Creator<ParcelableTest>()
 {
  @Override
  public ParcelableTest createFromParcel(Parcel source) {
   // TODO Auto-generated method stub
   ParcelableTest p = new ParcelableTest();
   p.string1 = source.readString();
   p.string2 = source.readString();
   return p;
  }
  @Override
  public ParcelableTest[] newArray(int size) {
   // TODO Auto-generated method stub
   return new ParcelableTest[size];
  }
  
  
 };
 
}

在mainActivity中创建一个按钮,点击按钮后,将构造对象传递到activity2中,在activity中取值并显示出来。

MainActivity.java代码如下:

 package com.activity.transfer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
 Button button1 = null;
 Button button2 = null;
 EditText edit = null;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  button1 = (Button)findViewById(R.id.button1);
  button2 = (Button)findViewById(R.id.button2);
  edit = (EditText)findViewById(R.id.editText1);
  button1.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(MainActivity.this,activity2.class);
    String name = edit.getText().toString();
    intent.putExtra("editText", name);
    
    //创建对象
    ParcelableTest mTest = new ParcelableTest();
    mTest.setString1Value(name);
    mTest.setString2Value("string2");
    //绑定数据到bundle
    Bundle mBundle = new Bundle();
    mBundle.putParcelable("DATA", mTest);
    intent.putExtras(mBundle);
    startActivity(intent);
   }
  });
  button2.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    
   }
  });
  
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
}

在activity2.java中显示出来,代码如下:

 package com.activity.transfer;
import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;
import android.content.Intent;

public class activity2 extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.activity2);
  Intent intent = this.getIntent();
  String name = intent.getStringExtra("editText");
  TextView text = (TextView)findViewById(R.id.textView2);
  //text.setText(name);
  ParcelableTest mTest = (ParcelableTest)getIntent().getParcelableExtra("DATA");
  text.setText(name+"ParcelableTest传过来的值为:"+"string1是:"+mTest.getString1Value()+"string2是:"+mTest.getString2Value());
 }
 
}

整个工程地址:

http://www.eoeandroid.com/thread-538356-1-1.html

 

转载于:https://my.oschina.net/kingfrog/blog/295175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值