1. 简单的数据传递
假设 Activity1 启动 Activity2 的时候给其传递数据
Activity1.java
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("key1", 123L); // long
intent.putExtra("key2", "Hello"); // String
startActivity(intent);
Activity2.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxxx);
...
String a = getIntent().getStringExtra("key1");
long b = getIntent().getLongExtra("key2", 0);
...
}
其他常用数据类型
传递数据用 putExtra (String name, TYPE value)
, 接收数据用相应类型的 get...Extra()
。
putExtra 数据类型 | get…Extra 方法 |
---|---|
int | getIntExtra(String, int) |
int[] | getIntArrayExtra(String) |
short | getShortExtra(String, short) |
short[] | getShortArrayExtra(String) |
byte | getByteExtra(String, byte) |
byte[] | getByteArrayExtra(String) |
boolean | getBooleanExtra(String, boolean) |
boolean[] | getBooleanArrayExtra(String) |
long[] | getLongArrayExtra(String) |
double[]) | getDoubleArrayExtra(String) |
char | getCharExtra(String, char) |
char[] | getCharArrayExtra(String) |
String | getStringExtra(String) |
String[] | getStringArrayExtra (String) |
long | getLongExtra(String, long) |
long[] | getLongArrayExtra(String) |
float | getFloatExtra (String, float) |
float[] | getFloatArrayExtra(String) |
double | getDoubleExtra(String, double) |
double[] | getDoubleArrayExtra(String) |
Bundle | getBundleExtra(String) |
需要注意的是:
- 有的 get...Extra()
有两个参数,比如 getIntExtra(String, int defaultValue)
, 如果没有接收到相应的数据,则返回第二个参数指定的默认值。其他一个参数的 get…Extra(String),如果没收到数据,返回默认值 null。
- 虽然String关键字可以随便起个简单的名字,但是Android API要求,名字必须使用包名作为前缀。API: The name must include a package prefix, for example the app com.android.contacts would use names like “com.android.contacts.ShowAll”.
2. 使用 Bundle 传递对象
Bundle类用作携带数据,它类似于Map,以 key-value 的形式把多种数据存放一个包裹里面传递,它提供了各种常用类型的putXxx()/getXxx()方法。
比较常用的是下面这种方法,还是假设 Activity1 启动 Activity2 的时候给其传递数据。
Activity1.java
Intent intent = new Intent(Activity1.this, Activity2.class);
Bundle bundle = new Bundle();
bundle.putString("key1", "Hello");
intent.putExtras(bundle);
startActivity(intent);
Activity2.java
Bundle bundle = getIntent().getExtras();
String a = bundle.getString("key1");
当然要是有多个Bundle的话,也可以把Bundle当做普通数据类型像上述的一样传递。
putExtra (String name, Bundle value)
getBundleExtra (String name)