Android Bundle 使用

来源:互联网 发布:python 开发平台有哪些 编辑:程序博客网 时间:2024/05/17 08:55
Bundle 对象: A mapping from String values to various Parcelable types
简单的说就是一个Map<String,Object>的封装类,可以从String类型的键中获得任意类型的对象。   
    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)
除了支持全部的基本类型,如byte、char、boolean、short、int、long、float、double等,还支持数组、List。
如:
String[] getStringArray(String key)
ArrayList<Integer> getIntegerArrayList(String key)
(省略Put方法)
如果自定义的类实现Serializable接口,同样可以将自定义的类put进去,并通过get获取。


Bundle可用于Intent中附加信息的传输,


Activity间的通讯是通过Intent类。比如有两个类A.class, B.class
由A启动新的activity B(单向),当B退出的时候A将不会接收到任何信息:
Intent i = new Intent(this,B.class); 
startActivity(i);
由A启动新的actvity B(双向),当B退出的时候A的onActivityForResult方法将会被调用给定的requestCode。
A.class添加代码:
Java代码 
Intent i = new Intent(this, B.class);   
i.putExtra(key, value);  
startActivityForResult(i, ACTIVITY_CODE);   
     
B.class添加代码
  
Java代码 
//这里获取A传过来的数据   
Bundle extras = this.getIntent().getExtras();  
 //这里通过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对象自己也实现了一些方法可以直接获取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)