(1)首先是Activity的简单跳转:
Activity的切换一般是通过Intent来实现的,Intent是一个Activity到达另一个Activity的引路者,它描述了起点(当前Activity)和终点(目标Activity)。一个简单Intent实现如下:
Intent
intent = new
Intent();
//创建一个Intent对象
intent.setClass(activity1.this,
activity2.class);
//描述起点和目标
startActivity(intent);
//开始跳转
(2)通常,我们在Activity的切换中,希望把前一个Activity的某些数据传递给下一个Activity。这时,我们可以借助Bundle来实现。Bundle,相当于数据存储包,用于存放我们想要转达的数据。打个比方,Intent就像一封邮件,里面有送信人地址(原始Activity),也有收信人地址(目标Activity),而Bundle就是附件也可看做是信件内容。下面是它的简单实现:
a、Activity1发送:
Intent
intent = new
Intent();
intent.setClass(activity1.this,
activity2.class);
//描述起点和目标
Bundle
bundle = new
Bundle();
//创建Bundle对象
bundle.putString("something",
"Activity1发来的数据");
//装入数据
intent.putExtras(bundle);
//把Bundle塞入Intent里面
startActivity(intent);
//开始切换
b、Activity2接受从Activity1发来的数据:
Intent
intent =
this.getIntent();
//获取已有的intent对象
Bundle
bundle =
intent.getExtras();
//获取intent里面的bundle对象
string =
bundle.getString("something");
//获取Bundle里面的字符串
(3)解决了如何传递数据问题,那么下一个问题是如何接受从目标Activity返回的处理结果。这里有两种方式,一是在onRestart方法(onRestrart表示重启Activity时激发的事件,具体看上一篇的生命周期)里面接受处理结果,方法实现和Activity2接受从Activity1发来的数据处理一样。另一种方式,是采用应答模式切换。这里,主要下第二种方式。应答模式切换和普通的切换不同在于,普通的是有去没回,应答则是有来有往。代码实现也不一样:1、从Activity1切换到Activity2:startActivityForResult(intent,0);2、从Activity2返回到Activity1:setResult(RESULT_OK,
intent)。3、接受返回结果:protected void onActivityResult()。具体代码如下;
a、从Activity1切换到Activity2:
Intent intent = new
Intent();
intent = intent.setClass(ActivityIntent.this,
AnotherActivity.class);
Bundle bundle = new
Bundle();
bundle.putString("string",
et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0);
//只有这里不同
//ActivityIntent.this.finish();
//不能用finish,会触发onDestroy();
b、从Activity2返回到Activity1:
Intent
intent = new
Intent();
intent =
intent.setClass(AnotherActivity.this,
ActivityIntent.class);
Bundle
bundle = new
Bundle();
bundle.putInt("result",
"Activity2的处理结果");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK,
intent);
//RESULT_OK是返回状态码
AnotherActivity.this.finish();
//会触发onDestroy();
c、Activity1接受Activity2的返回结果:
protected void onActivityResult(int requestCode, int resultCode,
Intent data)
{
super.onActivityResult(requestCode, resultCode,
data);
switch(resultCode) {
//根据状态码,处理返回结果
case
RESULT_OK:
Bundle bundle
=data.getExtras();
//获取intent里面的bundle对象
String result =
bundle.getInt("result");
break;
default:
break;
}
|