Bundle
對(duì)象: A mapping from String
values to various Parcelable types
簡(jiǎn)單的說(shuō)就是一個(gè)Map<String,Object>的封裝類(lèi),可以從String類(lèi)型的鍵中獲得任意類(lèi)型的對(duì)象。
public
Bundle() {
mMap = new HashMap<String,
Object>();
mClassLoader = getClass().getClassLoader();
}
Bundle封裝了一些常用的方法,比如:
putInt(String key, int value)
putString(String key,String value)
.......................
getInt(String key)
getString(String
key)
除了支持全部的基本類(lèi)型,如byte、char、boolean、short、int、long、float、double等,還支持?jǐn)?shù)組、List。
如:
String[] getStringArray(String key)
ArrayList<Integer>
getIntegerArrayList(String key)
(省略Put方法)
如果自定義的類(lèi)實(shí)現(xiàn)Serializable接口,同樣可以將自定義的類(lèi)put進(jìn)去,并通過(guò)get獲取。
Bundle可用于Intent中附加信息的傳輸,
Activity間的通訊是通過(guò)Intent類(lèi)。比如有兩個(gè)類(lèi)A.class, B.class
由A啟動(dòng)新的activity B(單向),當(dāng)B退出的時(shí)候A將不會(huì)接收到任何信息:
Intent i = new
Intent(this,B.class);
startActivity(i);
由A啟動(dòng)新的actvity B(雙向),當(dāng)B退出的時(shí)候A的onActivityForResult方法將會(huì)被調(diào)用給定的requestCode。
A.class添加代碼:
Java代碼
Intent i = new Intent(this, B.class);
i.putExtra(key, value);
startActivityForResult(i,
ACTIVITY_CODE);
B.class添加代碼
Java代碼
//這里獲取A傳過(guò)來(lái)的數(shù)據(jù)
Bundle extras =
this.getIntent().getExtras();
//這里通過(guò)key的方式獲取值
String value = extras.getString(key);
Java代碼
//把值傳回
A.class Bundle bundle = new Bundle();
bundle.putString(key,value);
Intent intent = new Intent();
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
Intent對(duì)象自己也實(shí)現(xiàn)了一些方法可以直接獲取Extras中的值。
比如:
byte getByteExtra(String name, byte defaultValue)
int getIntExtra(String name, int defaultValue)
float getFloatExtra(String name, float defaultValue)
String getStringExtra(String name)
Bundle bundle=intent.getExtra()
bundle.getString(String key)
等效于
getStringExtra(String key)