1、打開新的Activity,並傳遞若干個參數給它
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
.......
button.setOnClickListener(new View.OnClickListener(){//點擊該按鈕會打開一個新的Activity
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NewActivity.class)
Bundle bundle = new Bundle();//該類用作攜帶數據
bundle.putString("name", "熊貓");
bundle.putInt("age", 4);
intent.putExtras(bundle);//附帶上額外的數據
startActivity(intent);
}}); }
}
在新的Activity中接收前面Activity傳遞過來的參數:
public class NewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
........
Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
}
}
2、Bundle類的作用
Bundle類用作攜帶數據,它類似於Map,用於存放key-value名值對形式的值。相對於Map,它提供了各種常用類型的putXxx()/getXxx()方法,
如:putString()/getString()和putInt()/getInt(),putXxx()用於往Bundle對象放入數據,getXxx()方法用於從Bundle對象裏獲取數據。
Bundle的內部實際上是使用了HashMap<String, Object>類型的變量來存放putXxx()方法放入的值:
public final class Bundle implements Parcelable, Cloneable {
......
Map<String, Object> mMap;
public Bundle() {
mMap = new HashMap<String, Object>();
......
}
public void putString(String key, String value) {
mMap.put(key, value);
}
public String getString(String key) {
Object o = mMap.get(key);
return (String) o;
........//類型轉換失敗後會返回null,這裏省略了類型轉換失敗後的處理代碼
}
}
在調用Bundle對象的getXxx()方法時,方法內部會從該變量中獲取數據,然後對數據進行類型轉換,轉換成什麼類型由方法的Xxx決定,getXxx()方法會把轉換後的值返回。
3、爲Intent附加數據的兩種寫法
第一種寫法,用於批量添加數據到Intent:
Intent intent = new Intent();
Bundle bundle = new Bundle();//該類用作攜帶數據
bundle.putString("name", "熊貓");
intent.putExtras(bundle);//爲意圖追加額外的數據,意圖原來已經具有的數據不會丟失,但key同名的數據會被替換
第二種寫法:這種寫法的作用等價於上面的寫法,只不過這種寫法是把數據一個個地添加進Intent,這種寫法使用起來比較方便,而且只需要編寫少量的代碼。
Intent intent = new Intent();
intent.putExtra("name", "熊貓");
Intent提供了各種常用類型重載後的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法內部會判斷當前Intent對象內部是否已經存在一個Bundle對象,如果不存在就會新建Bundle對象,以後調用putExtra()方法傳入的值都會存放於該Bundle對象,下面是Intent的putExtra(String name, String value)方法代碼片斷:
public class Intent implements Parcelable {
private Bundle mExtras;
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}