在Activity之间进行数据交换有一个“信使”:Intent,因此主要是将需要交换的数据放入Intent即可
Intent提供了多个重载方法,“携带”额外的数据:
**放入Bundle数据:**
putExtras(Bundle data);向Intent中放入需要“携带”数据包
Bundle getExtras();取出Intent所“携带”的数据包
**放入键值数据:**(源码底层实际上还是使用的Bundle)
putExtra(String name,Xxx value);按key-value形式放入数据,Xxx是任意类型
getXxxExtra(String name);按key值取出指定类型的数据
![](https://box.kancloud.cn/2016-03-10_56e0d9b093caa.jpg)
![](https://box.kancloud.cn/2016-03-10_56e0d9b0aa352.jpg)
Bundle就是一个简单的数据携带包,Bundle方法:
**放入基本类型:**
putXxx(String key,Xxx data);向Bundle中放入Int,Long等各种类型的数据
getXxx(String key);取出Int,Long等各种类型数据
**放入对象**:
putSeralizable(String key,Seralizable data);放入一个可序列化的对象
getSeralizable(String key,Seralizable data);取出一个可序列化的对象
![](https://box.kancloud.cn/2016-03-10_56e0d9b0cac16.jpg)
一般第一个Activity中:
* Bundle放数据用:
* putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型
* putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象,主要用于放对象
* Intent放Bundle用:
* putExtras(Bundle data):向Intent中放入需要“携带”的数据包
被启动的Activity中:
* Intent取数据:
* Bundle getExtras();取出Intent所“携带”的数据包
* getXxxExtras(String key);从Intent中按key取出指定类型的数据,便携方式取Bundle中的数据
用第二个Activity处理注册信息:
activity_main.xml
~~~
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入您的注册信息"
android:textSize="20dp" />
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账号:"
android:textSize="20dp" />
<EditText
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入账号"
android:selectAllOnFocus="true" >
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="20dp" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入密码"
android:inputType="textPassword" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:"
android:textSize="20dp" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" />
</RadioGroup>
</TableRow>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册" />
</TableLayout>
~~~
![](https://box.kancloud.cn/2016-03-10_56e0d9b0e9cc6.jpg)
MainActivity.java
~~~
package com.hust.bundletest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
/*用第二个Activity处理注册信息。
* 在Activity之间进行数据交换是同过Intent信使来实现的。Intent提供了多种重载的方法,来携带额外数据:
* 1,使用Bundle对象捆绑数据,Intent携带Bundle对象
* putExtras(Bundle data):向Intent中放入需要“携带”的数据包
* Bundle getExtras();取出Intent所“携带”的数据包
* 2,对于简单的数据类型,可以使用便携的方法直接存,取Intent所携带的Bundle对象,源码里可发现都是先创建的Bundle对象
* putExtras(String key,Xxx value);想Intent中按键值对(key-value)的形式存入数据
* getXxxExtras(String key);从Intent中按key取出指定类型的数据
* */
/*
* Bundle就是一个简单的数据携带包,该Bundle对象包含了多种方法:
* 1,放入简单的数据类型
* putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型
* getXxx(String key);取出int,long个中简单的数据类型
*2,放入可序列化的对象,实现Seriliable接口的对象
* putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象
* getSerializable(String key);取出可序列化的对象
*
* 一般第一个Activity中:
* Bundle放数据用:
* putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型
* putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象,主要用于放对象
* Intent放Bundle用:
* putExtras(Bundle data):向Intent中放入需要“携带”的数据包
*
* 被启动的Activity中:
* Intent取数据:
* Bundle getExtras();取出Intent所“携带”的数据包
* getXxxExtras(String key);从Intent中按key取出指定类型的数据,便携方式取Bundle中的数据
* */
public class MainActivity extends Activity {
@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);
//创建一个Intent对象
Intent intent=new Intent(MainActivity.this,ResultActivity.class);
intent.putExtras(bundle);
//启动intent对应的Activity
startActivity(intent);
}
});
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
~~~
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;
}
}
~~~
ResultActivity.java
~~~
package com.hust.bundletest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class ResultActivity extends Activity {
@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());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.result, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
~~~
![](https://box.kancloud.cn/2016-03-10_56e0d9b10fdbc.jpg)
- 前言
- 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