两个Activity之间有一个“信使”:Intent.因此我们主要将需要交换的数据放入Intent即可。
Intent提供了多个重载的方法来“携带”额外的数据。如下所示。
putExtras(Bundle data):向Intent中放入需要“携带”数据。
putSerializable():向Bundle中放入一个可序列化的对象。
为了取出Bundle数据携带包里的数据,Bundle提供了如下方法。
getSerializable(String key,Serializable data):从Bundle取出一个可序列化的对象
Activity_01
//创建一个Bundle对象
Bundle data = new Bundle(); //1
//将一个可序列化的对象以键值对的方式放入到Bundle中
data.putSerializable("person", p); //2
//创建一个intent
Intent intent = new Intent(BundleDemo.this,ResultActivity.class); //3
//向intent中放入“打包”好的数据
intent.putExtras(data); //4
//启动inten对应的Activity
startActivity(intent); //5
Activity_02
//获取启动该result的intent
Intent intent = getIntent(); //1
//获取该intent所携带的数据
Bundle data = intent.getExtras(); //2
//从Bundle数据包中取出数据
Person p = (Person) data.getSerializable("person"); //3
uname.setText("您的用户名为:" + p.getUsername()); //4
pword.setText("您的密码为:" + p.getPassword());
gender.setText("您的性别为:" + p.getGender());
Activity_01想和Activity_02交换数据。就需要经过以上步骤。
为了便于理解。把它比作一个发货人和一个收货人。
发货人:
1、Bundle data = new Bundle(); 创建一个Bundle对象。可以看做发货人准备了一个捆绑的绳子。
2、data.putSerializable("person", p); 将一个可序列化的对象以键值对的形式放入到Bundle中。可以理解为,用绳子将货物捆绑好。
3、Intent intent = new Intent(BundleDemo.this,ResultActivity.class); 创建一个“信使”:Intent。
第一个参数:packageContext A Context of the application package implementing this class.
第二个参数:cls The component class that is to be used for the intent.
我的理解为:发件人信息,收件人地址(具体需要交换数据的Activity)
4、intent.putExtras(data); 向intent中放入“捆绑”好的数据。将已经捆绑好了的数据交给快递员。
5、startActivity(intent); 启动inten对应的Activity。快递员开始送货。
收货人:
1、Intent intent = getIntent(); 获取启动该Activity_02的intent。快递员到达地点。
2、Bundle data = intent.getExtras(); 获取该intent所携带的数据;从快递员哪里接受了货物。
3、Person p = (Person) data.getSerializable("person"); 从Bundle数据包中取出数据。将捆绑好的货物解开。
4、uname.setText("您的用户名为:" + p.getUsername()); 获得具体的数据。
以上就是我个人理解,若有不对的地方,欢迎大家指正。共同促进。