1. 程式人生 > >Activity之間使用Intent和Bundle傳值的區別

Activity之間使用Intent和Bundle傳值的區別

1.Bundle類的作用

  Bundle類用作攜帶資料,它類似於Map,用於存放key-value名值對形式的值。相對於Map,它提供了各種常用型別的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用於往Bundle物件放入資料,getXxx()方法用於從Bundle物件裡獲取資料。Bundle的內部實際上是使用了HashMap<String, Object>型別的變數來存放putXxx()方法放入的值。簡單地說,Bundle就是一個封裝好的包,專門用於匯入Intent傳值的包。

2.為Intent附加資料的兩種寫法

  第一種寫法,用於批量新增資料到Intent:

Intentintent = new Intent();
  Bundle bundle = new Bundle();//該類用作攜帶資料
  bundle.putString("name","Alice");
  intent.putExtras(bundle);//為意圖追加額外的資料,意圖原來已經具有的資料不會丟失,但key同名的資料會被替換

  第二種寫法:這種寫法的作用等價於上面的寫法,只不過這種寫法是把資料一個個地新增進Intent,這種寫法使用起來比較方便,而且只需要編寫少量的程式碼

  Intent intent = new Intent();
  intent.putExtra("name","XXX");

  那麼,這兩種方法有什麼區別呢?

  完全沒有區別。當你呼叫putExtras()方法時,所傳入的Bundle會被轉化為Intent的鍵值(別忘了Intent也以鍵值模式轉載資料)。

  那麼,現在看看如何將Intent和Bundle取出來。

  方法很簡單,直接使用this.getIntent()就可以得到傳來的Intent,然後在這個Intent的基礎上呼叫getExtras()就可以得到Bundle。然後這個Bundle你想要什麼得到什麼就get什麼。

  比如String str=bundle.getString("USERNAME"); 就是得到鍵為“USERNAME”的字串,int num=bundle.getInt("Number");就是得到鍵為“Number”的整型。