Android基礎 | Activity間進行數據傳遞

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;
 }





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章