1. 我们在使用Intent的跳转页面的时候,经常使用到的是需要携带数据到目标页面上,例如在登录页面,点击登录之后那么需要将当前得用户信息带到另外的一个页面,当用户退出登录的时候需要将用户登录的信息在之前的登录页面进行显示,下面是使用Intent来携带数据的一个例子
2. 需要有三个步骤:
① 为了接收目的Activity返回的值,源Activity在执行跳转的时候要调用startActivityForResult(Intent, requestCode)方法来激活返回数据的Activity
startActivityForResult(Intent, requestCode)方法
第一个参数是Intent对象,包含要到达的Activity信息;
第二个参数是requestCode,是唯一标识目的Activity的标识码—— 用于有多个目标Activity
② 在目的Activity中,调用setResult()方法设置返回码
setResult(int resultCode, Intent data) 方法
resultCode参数:表示为Intent的结果状态数据
其值通常是Activity.TRSULT_OK或Activity.TRSULT_CANCELED
用户也可以定义自己的resultCode,它支持任意整数值
当运行目的Activity时,如果用户按下硬件返回键,或在调用finish()方法之前没有调用setResult()方法,则resultCode值将会设定为Activity.TRSULT_CANCELED,结果Intent将被设为nulldata参数: Intent对象,包含要返回的Activity信息
③ 重写源Activity中的onActivityResult()方法,当目的Activity返回时,会触发调用源Activity中的事件处理方法onActivityResult()
onActivityResult(int requestCode, int resultCode, Intent data)方法
requestCode:请求码,区分请求的目标Activity.
resultCode:结果/回复码 ,用于判断目标Activity的返回方式
3. 在登录页面需要将先获取EditText的文本数据,经常对于获取到的数据放入到Bundle对象中,然后将Bundle放到Intent
登录页面需要设置返回码:
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Login.this, UserInterface.class);
Bundle bundle = new Bundle();
bundle.putString("userlogininfo1", account.getText().toString());
bundle.putString("userlogininfo2", password.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent, USERLOGOUTCODE);
}
});
登录页重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(data != null){
if(requestCode == USERLOGOUTCODE){
if(resultCode == USERLOGOUTCODE){
Bundle bundle = data.getExtras();
account.setText(bundle.getString("userlogininfo1"));
password.setText(bundle.getString("userlogininfo2"));
}
}
}
}
目标页面设置返回码:
userexit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
intent.putExtras(bundle);
setResult(USERLOGOUTCODE, intent);
finish();
}
});