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同名的数据会被替换
Bundle bundle = intent.getExtras();
bundle.getXXX(key);
第二种写法:这种写法的作用等价于 上面的写法,只不过这种写法是把数据一个个地添加 进 Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。
Intent intent = new Intent();
intent.putExtra("name","XXX");
intent.getXXXExtra(key);
那么,这两种方法有什么区别呢?
完全没有区别。当你调用 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”的整型。