Android通过Intent传递对象
1、传递Serializable方式类对象
首先创建一个序列化类:User
import java.io.Serializable; public class User implements Serializable { private int ID; private String UserName; private String PWD; public final void setID(int value) { ID = value; } public final int getID() { return ID; } public final void setUserName(String value) { UserName = value; } public final String getUserName() { return UserName; } public final void setPWD(String value) { PWD = value; } public final String getPWD() { return PWD; } }
登录窗体登录后传递内容
Intent intent = new Intent(); intent.setClass(Login.this, MainActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("user", user); intent.putExtras(bundle); this.startActivity(intent);
接收端
Intent intent = this.getIntent(); user=(User)intent.getSerializableExtra("user");
以上就可以实现对象的传递。
补充:
如果传递的是List<Object>,可以把list强转成Serializable类型,而且object类型也必须实现了Serializable接口
Intent.putExtras(key, (Serializable)list)
接收
(List<YourObject>)getIntent().getSerializable(key)
2、传递数据值
(1)用于Activity之间的数据传递
在起始Activity中,发送数据:
Intent intent = new Intent(); //设置起始Activity和目标Activity,表示数据从这个Activity传到下个Activity intent.setClass(ThisActivity.this,TargetActivity.class); //绑定数据 intent.putExtra("username",username);//也可以绑定数组 intent.putExtra("userpass",userpass); //打开目标Activity startActivity(intent);
在目标Activity中,接收数据:
//获得意图 Intent intent = getIntent(); //读取数据 String name = intent.getStringExtra("username"); String pass = intent.getStringExtra("userpass);
(2)也适用Bundle(捆)
在起始Activity中,发送数据:
Intent intent = new Intent(); //设置起始Activity和目标Activity,表示数据从这个Activity传到下个Activity intent.setClass(ThisActivity.this,TargetActivity.class); //一次绑定多个数据 Bundle bundle = new Bundle(); bundle.putString("username",username); bundle.putString("userpass",userpass); intent.putExtras(bundle); //打开目标Activity startActivity(intent);
在目标Activity中,接收数据:
//获得意图 Intent intent = getIntent(); //读取数据 Bundle bundle = intent.getExtras(); String name = bundle.getString("username"); String pass = bundle.getString("userpass");
3、当需要从目标Activity回传数据到原Activity时,可以使用上述方法定义一个新的Intent来传递数据,也可以使用startActivityForResult(Intent intent, int requestCode)方法。
在起始Activity中,发送数据:
Intent intent = new Intent(); //设置起始Activity和目标Activity,表示数据从这个Activity传到下个Activity intent.setClass(ThisActivity.this,TargetActivity.class); //绑定数据 intent.putExtra("username",username);//也可以绑定数组 intent.putExtra("userpass",userpass); //打开目标Activity startActivityForResult(intent,1);
//需要重写onActivityResult方法 protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{ super.onActivityResult(requestCode,resultCode,intent); //判断结果码是否与回传的结果码相同 if(resultCode == 1)
{ //获取回传数据 String name = intent.getStringExtra("name"); String pass = intent.getStringExtra("pass); //对数据进行操作 ......
} }
在目标Activity中,接收数据:
//获得意图 Intent intent = getIntent(); //读取数据 String name = intent.getStringExtra("username"); String pass = intent.getStringExtra("userpass); //从EditText中获取新的数据给name和pass name = editText1.getText().toString(); pass = editText2.getText().toString() //数据发生改变,需要把改变后的值传递回原来的Activity intent.putExtra("name",name); intent.putExtra("pass",pass); //setResult(int resultCode,Intent intent)方法 setResult(1,intent); //销毁此Activity,摧毁此Activity后将自动回到上一个Activity finish();