Android基础 | Activity间进行数据传递

来源:互联网 发布:诺基亚衰落的原因知乎 编辑:程序博客网 时间:2024/06/08 06:45

1、打开新的Activity,并传递若干个参数给它

public class MainActivity extends Activity {   @Override protected void onCreate(Bundle savedInstanceState) {   .......   button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity         public void onClick(View v) {             Intent intent = new Intent(MainActivity.this, NewActivity.class)             Bundle bundle = new Bundle();//该类用作携带数据             bundle.putString("name", "熊猫");             bundle.putInt("age", 4);             intent.putExtras(bundle);//附带上额外的数据             startActivity(intent);     }}); } } 
在新的Activity中接收前面Activity传递过来的参数:  

public class NewActivity extends Activity {      @Override      protected void onCreate(Bundle savedInstanceState) {              ........              Bundle bundle = this.getIntent().getExtras();              String name = bundle.getString("name");              int age = bundle.getInt("age");           } } 

2、Bundle类的作用

Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,
如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。
Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值: 

public final class Bundle implements Parcelable, Cloneable {    ......    Map<String, Object> mMap;    public Bundle() {       mMap = new HashMap<String, Object>();        ......    }    public void putString(String key, String value) {      mMap.put(key, value);    }    public String getString(String key) {       Object o = mMap.get(key);       return (String) o;       ........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码    }}
在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。

3、为Intent附加数据的两种写法

第一种写法,用于批量添加数据到Intent: 

Intent intent = new Intent();Bundle bundle = new Bundle();//该类用作携带数据bundle.putString("name", "熊猫");intent.putExtras(bundle);//为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换

第二种写法:这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。 

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

Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的putExtra(String name, String value)方法代码片断:
public class Intent implements Parcelable {private Bundle mExtras;public Intent putExtra(String name, String value) {        if (mExtras == null) {            mExtras = new Bundle();        }        mExtras.putString(name, value);        return this; }





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝把蜡笔吃了怎么办 吃鸡更新了怎么办开始 数字画涂料干了怎么办 广告画颜料干了怎么办 宝宝断奶后瘦了怎么办 腿一个粗一个细怎么办 两条小腿不一样粗怎么办 两岁宝宝坐不了怎么办 q糖孩子吃多了怎么办 q糖孩子吃的太多怎么办 ps图层不能覆盖怎么办 孩子的字写的不好怎么办 孩子爱打人怎么办 6招 一岁宝宝爱打人怎么办 2岁小朋友爱打人怎么办 小朋友爱动手怎么办4岁 5,6岁爱动手打人怎么办 七个月宝宝大便干燥怎么办 两岁宝宝吐奶怎么办 2岁宝宝轻微蛀牙怎么办 2岁宝宝喝水都吐怎么办 2岁宝宝吐的厉害怎么办 两岁宝宝个子矮怎么办 宝宝吐了一天了怎么办 3岁宝宝吃饭呕吐怎么办 3岁宝宝突然呕吐怎么办 11个月婴儿呕吐怎么办 2岁宝宝呕吐是怎么办 2岁宝宝呕吐腹泻怎么办 七个月的宝宝拉肚子怎么办 两岁宝宝玩手机怎么办 5岁宝宝突然口吃怎么办 3岁宝宝突然口吃怎么办 2岁半宝宝结巴怎么办 卤门2岁未闭合怎么办 宝宝2岁说话结巴怎么办 4岁半的宝宝口臭怎么办 2岁宝宝口气重怎么办 2岁宝宝有口气怎么办 2岁宝宝头大怎么办 2周宝宝讲话结巴怎么办