在Android中,当Activity之间相互跳转时,可以使用意图(Intent)来传递相应的数据。
新的Activity与原来Activity不在同一个进程中,原来Activity带着请求码跳到一个新的Activity界面,可以使用startActivityForResult(Intent intent, int requestCode)。当新的Activity关闭时,会触发原来Activity的onActivityResult事件。
onActivityResult(int requestCode, int resultCode, Intent data)
requestCode: 通过这个参数可以判断是从哪个界面回来的
resultCode、data:被关闭的那个界面传递回来的数据
配送地址界面:
新的Activity与原来Activity不在同一个进程中,原来Activity带着请求码跳到一个新的Activity界面,可以使用startActivityForResult(Intent intent, int requestCode)。当新的Activity关闭时,会触发原来Activity的onActivityResult事件。
onActivityResult(int requestCode, int resultCode, Intent data)
requestCode: 通过这个参数可以判断是从哪个界面回来的
resultCode、data:被关闭的那个界面传递回来的数据
当我们关闭新的Activity时,会触发主Acvitity的onActivityResult方法,那么由于原Activity发送了一个请求码,这时候就可以根据请求码判断是从哪个界面回来的了。
新界面:
setResult(int resultCode):设置传递到上一个界面的数据setResult(int resultCode, Intent data):设置传递到上一个界面的数据从新Activity回到原Activity时也可以设置一些结果码信息。
案例:
在原来的界面设置两个按钮,分别用于获取支付方式和配送地址
原来的界面:
public class MainActivity extends Activity implements OnClickListener {
private TextView mPayTv;
private TextView mReceiveTv;
private static final int PAY_REQ = 0x001;
private static final int RECEIVE_REQ = 0x002;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.pay_btn).setOnClickListener(this);
findViewById(R.id.receive_btn).setOnClickListener(this);
mPayTv = (TextView) findViewById(R.id.pay_tv);
mReceiveTv = (TextView) findViewById(R.id.receive_tv);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pay_btn:
Intent intent = new Intent(this,PayActivity.class);
startActivityForResult(intent, PAY_REQ);
break;
case R.id.receive_btn:
Intent receiveIntent = new Intent(this,ReceiveActivity.class);
startActivityForResult(receiveIntent, RECEIVE_REQ);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//String payResult = data.getStringExtra("payResult");
//mPayTv.setText(payResult);
//String receiveResult = data.getStringExtra("receiveResult");
//mReceiveTv.setText(receiveResult);
if(requestCode == PAY_REQ){
String payResult = data.getStringExtra("payResult");
mPayTv.setText(payResult);
}else if(requestCode == RECEIVE_REQ){
String receiveResult = data.getStringExtra("receiveResult");
mReceiveTv.setText(receiveResult);
}
}
}
支付界面:
public class PayActivity extends Activity implements OnClickListener {
private Button mWchatBtn;
private Button mAlipyBtn;
private Button mUnionPayBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pay);
mWchatBtn = (Button) findViewById(R.id.wchat_btn);
mAlipyBtn = (Button) findViewById(R.id.alipay_btn);
mUnionPayBtn = (Button) findViewById(R.id.unionpay_btn);
mWchatBtn.setOnClickListener(this);
mAlipyBtn.setOnClickListener(this);
mUnionPayBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Button btn = (Button)v;
String result = btn.getText().toString();
Intent intent = new Intent();
//intent封装数据
intent.putExtra("payResult", result);
setResult(0, intent);
//杀掉界面(不可少,少了就传不了数据给原来的界面)
finish();
}
}
配送地址界面:
public class ReceiveActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive);
findViewById(R.id.receive_btn).setOnClickListener(this);
}
@Override
public void onClick(View v) {
Button btn = (Button)v;
String receiveResult = btn.getText().toString();
Intent intent = new Intent();
intent.putExtra("receiveResult", receiveResult);
setResult(0, intent);
finish();
}
}