Intentを介してBeanを渡す方法

4555 ワード

1.方法1
(1)BeanSerializable
public class BeanSerializable implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String name;
	private int age;
	private String address;
	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 getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

 (2)Sender
public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanSerializable bean = new BeanSerializable();
				bean.setAddress("   195 ");
				bean.setAge(25);
				bean.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", bean);  
				startActivity(intent);  
			}
		});
	}
}

  (3)Receiver
public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanSerializable bean = (BeanSerializable) intent.getSerializableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(bean.getName() + " / " + bean.getAddress() + " / " + String.valueOf(bean.getAge()));
	}
}
 
2.方法2
(1)BeanParcelable
public class BeanParcelable implements Parcelable {

	private String name;
	private int age;
	private String address;

	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 getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(address);
	}

	public static final Parcelable.Creator CREATOR = new Creator() {

		public BeanParcelable createFromParcel(Parcel source) {

			BeanParcelable bean = new BeanParcelable();
			bean.name = source.readString();
			bean.age = source.readInt();
			bean.address = source.readString();
			return bean;
		}

		public BeanParcelable[] newArray(int size) {
			return new BeanParcelable[size];
		}

	};
}

 (2)Sender
public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanParcelable beanParcelable = new BeanParcelable();
				beanParcelable.setAddress("   545 6  402");
				beanParcelable.setAge(25);
				beanParcelable.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", beanParcelable);  
				startActivity(intent);  
			}
		});
	}
}

 (3)Receiver
public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanParcelable beanParcelable = (BeanParcelable) intent.getParcelableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(beanParcelable.getName() + " / " + beanParcelable.getAddress() + " / " + String.valueOf(beanParcelable.getAge()));
	}
}

 
3.注意事項
Beanの中には、上記の2つの方法では伝達できないものもあります.例えばDrawble[]photos;パラメータのBeanは、androidのIO設計ではwrite Drawableができないため、writeString、writeInteger、writeFileなどしかできません.したがって、Drawable[]パラメータを直接渡すのではなく、Drawable[]を生成するデータを転送し、宛先に転送してこれらのデータを再利用してDrawable[]を生成します.飛行機を輸送するようですが、飛行機全体を輸送することはできません.まず、飛行機の各部品を目的地(これは輸送可能です)に輸送し、目的地でこれらの部品を飛行機に組み立てるしかありません.