Intent很神奇.可以用Intent来启动新的Activity,启动广播,启动服务,发送数据........太多了.
这里介绍下,使用Intent启动新的Activity,传递数据,以及startActivityForResult()方法的使用.
我们这里有两个Activity,MainActivity.java和OtherActivity.java. 我们需要做的是,点击Button的时候,获取到MainActivity中的用户输入的数据,传递给OtherActivity,在OtherActivity上进行整合后,在传递给MainActivity进行显示.
先看效果如,也就是整个流程:
第一步 从MainActivity跳转到OtherActivity,并将输入的数据传递过去.
代码如下:
// 将Intent初始化 Intent(packageContext, cls)
// packageContext指的是当前Activity
// cls指的是目标Activity
intent = new Intent(MainActivity.this, OtherActivity.class);
// 创建Bundle对象用来存放数据,Bundle对象可以理解为数据的载体
Bundle b = new Bundle();
// 调用Bundle对象的putString方法,采用 key-value的形式保存数据
b.putString("name", name.getText().toString());
b.putString("age", age.getText().toString());
// 将数据载体BUndle对象放入Intent对象中.
intent.putExtras(b);
// 调用startActivityForResult方法
// startActivityForResult(intent,requestCode);
// intent,数据载体
// requestCode 请求的Code,这里一般 大于等于0的整型数据就可以.
startActivityForResult(intent, 1);
注释已经比较详细了,这里值得一提的是,由于需要OtherActivity返回数据,所以采用了startActivityForResult()的方法,如果不需要返回数据,而是单纯的启动Activity,只需要使用tartActivity();就可以了.
第二步,OtherActivity接收数据,核心代码如下:
// 获取数据
mIntent = getIntent();
Bundle b = mIntent.getExtras();
// 加载到tv
tv.setText("输入的姓名是:" + b.getString("name") + "输入的年龄是:"
+ b.getString("age"));
这里创建一个Bundle对象后,调用getString方法,根据先前设置的key而获取到数据.
第三步,返回数据,这一步可以分为两个部分:
OtherActivity将需要返回的数据封装,代码如下:
mIntent = new Intent(OtherActivity.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("data", tv.getText().toString());
mIntent.putExtras(b);
this.setResult(RESULT_OK, mIntent);
OtherActivity.this.fin