Bundle物件的使用

發表於2016-12-14

在Android開發中,如果要通過一個Activity啟動另外一個Activity,需要呼叫startActivity()函式,這個函式的引數是一個Intent物件,這個物件通常的初始化方式如下:

Intent intent = new Intent();
intent.setClass(this,SecondActivity.class);
startActivity(intent);

這樣就完成了一個新的Activity的啟動,但是這種啟動方式兩個Activity之間不會有任何的資料傳遞,很多情況下,我們遇到的往往是前一個Activity要把資料傳遞給新啟動的Activity,這就要用到Bundle物件了。
比如在第一個Activity中,我們獲取了身高和性別兩種資料,需要傳遞給新啟動的Activity,那麼就要把這些資料封裝進Bundle物件裡面,再把Bundle物件assign給Intent,作為starActivity()函式的引數。
實現程式碼如下:

Intent intent = new Intent();
intent.setClass(this,SecondActivity.class);
//封裝Bundle物件
Bundle bundle = new Bundle();
bundle.putDouble("height",height);//height為double型變數
bundle.putString("sex",sex);//sex為string型變數
//把Bundle物件assign給Intent
intent.putExtras(bundle);
startActivity(intent);

第二個Activity相應的也要接收資料,方法也很簡單,先從Intent物件中分離Bundle,再按照相同方法提取資料。
實現程式碼如下:

Bundle bundle1=this.getIntent().getExtras();
String sex=bundle1.getString("sex");
double height=bundle1.getDouble("height");

值得注意的是,如果程式中有多個Activity,要在AndroidManifest.xml中宣告,宣告一個Activity格式如下:

<activity android:name="SecondActivity"></activity>

當存在多個Activity時,必須指定一個最先啟動的Activity,也是在AndroidManifest.xml中宣告,宣告方式如下:

<activity android:name="SecondActivity">
     <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
          <category android:name="android.intent.category.LAUNCHER"/>
     </intent-filter>
</activity>

Bundle物件還有其他很多種對不同資料型別的操作方法,比如getBoolean等,具體可以到Android官網去參考。

相關文章