Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递
Intent中传递这2种对象的方法:
~~~
Bundle.putSerializable(Key,Object); //实现Serializable接口的对象
Bundle.putParcelable(Key, Object); //实现Parcelable接口的对象
~~~
Person.java
~~~
package com.hust.bundletest;
import java.io.Serializable;
public class Person implements Serializable {
String name;
String password;
String sex;
public Person(String name, String password, String sex) {
super();
this.name = name;
this.password = password;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
~~~
注册窗体发送Intent的代码:
~~~
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//获得的三个组件
EditText name=(EditText) findViewById(R.id.name);
EditText password=(EditText) findViewById(R.id.password);
RadioButton male=(RadioButton) findViewById(R.id.radio0);
//判断是否被选
String sex=(male.isChecked())?"男":"女";
//封装成一个对象
Person p=new Person(name.getText().toString(),password.getText().toString(),sex);
//创建Bundle对象
Bundle bundle=new Bundle();
bundle.putSerializable("person", p);//Bundle中放一个对象
//创建一个Intent对象
Intent intent=new Intent(MainActivity.this,ResultActivity.class);
intent.putExtras(bundle);
//启动intent对应的Activity
startActivity(intent);
}
});
~~~
接收端的代码:
~~~
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
//获取显示组件
TextView name=(TextView) findViewById(R.id.text1);
TextView password=(TextView) findViewById(R.id.text2);
TextView sex=(TextView) findViewById(R.id.text3);
//获取Intent对象
Intent intent=getIntent();
//从Intent对象中获取序列数据
//Person p=(Person) intent.getSerializableExtra("person");相当于
Bundle bundle=intent.getExtras();//获取Bundle对象
Person p=(Person) bundle.getSerializable("person");//Bundle对象中获取可序列化对象
name.setText(p.getName());
password.setText(p.getPassword());
sex.setText(p.getSex());
}
~~~
以上就可以实现对象的传递。
如果传递的是List,可以把list强转成Serializable类型,而且object类型也必须实现了Serializable接口
~~~
Intent.putExtras(key, (Serializable)list)
~~~
~~~
(List)getIntent().getSerializable(key)
~~~
- 前言
- Eclipse搭建android环境及Genymotion模拟器安装问题解决方法
- 表格布局(TableLayout)及重要属性
- 帧布局(FrameLayout)及属性
- layout_width和width,layout_height和height
- UI组件之TextView及其子类
- UI组件之TextView及其子类(一)TextView和EditText
- UI组件之TextView及其子类(二)RadioButton和CheckBox
- UI组件之TextView及其子类(三)ToggleButton和Switch
- UI组件之TextView及其子类(四)AnalogClock,DigitalClock
- UI组件之TextView及其子类(五)计时器Chronometer
- UI组件之ImageView及其子类(一)ImageView显示图片
- UI组件之ImageView及其子类(二)ImageButton ,ZoomButton
- UI组件之AdapterView及其子类关系,Adapter接口及其实现类关系
- UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView
- UI组件之AdapterView及其子类(二)GridView网格视图的使用
- UI组件之AdapterView及其子类(三)Spinner控件详解
- UI组件之AdapterView及其子类(四)Gallery画廊控件使用
- UI组件之AdapterView及其子类(五)ListView组件和ListActivity
- UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
- UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用
- UI组件之ProgressBar及其子类(二)SeekBar拖动条和RatingBar星级评分条的使用
- ViewFlipper的功能和用法
- Toast的功能和用法
- TabHost选项卡的 功能和用法
- AlertDialog创建6种对话框的用法
- Android基于监听的事件处理机制
- Android基于回调的事件处理
- Handler消息传递机制(一)
- Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
- 启动Activity的两种方式startActivity和startActivityForResult(一)
- 启动Activity的两种方式startActivity和startActivityForResult(二)
- Activity的生命周期理解
- Bundle在Activity之间交换数据
- 通过 Intent 传递类对象
- Intent对象详解(一)
- Intent对象详解(二)
- 使用指定的Action,Category调用系统Activity
- 使用Action,Data属性启动系统Activity
- Android数据存储的三种方式-SharedPrefrences,File,SQLite