在Android系统中,应用程序一般都有多个Activity,Intent可以实现以下2个功能:
1.Activity之间的切换
2.Activity之间的数据传递
一.Intent启动Activity代码
Button btnLogin = (Button) findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//参数1:本Activity的上下文
//参数2:目标Activity
Intent intent = new Intent(LoginActivity.this,StuActivity.class);
startActivity(intent);
}
});
二.获取子Acitvity返回值
1.以Sub-Activity的方式启动Activity
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(TransferValueActivity.this,TransferValueSubActivity.class);
//startActivityForResult(Intent,requesCode)
//参数1:决定启动哪个Activity
//参数2:请求码,用于区分是哪个子Activity返回
startActivityForResult(intent, 1);
}
});
Button btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Inten(TransferValueActivity.this,TransferValueSub2Activity.class);
startActivityForResult(intent, 2);
}
});
Button btn3 = (Button) findViewById(R.id.button3);
btn3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Inten(TransferValueActivity.this,TransferValueSub3Activity.class);
startActivityForResult(intent, 3);
}
});
2.设置子Activity的返回值
(1)以Uri的形式
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Uri data = Uri.parse("Activity1返回");
Intent intent = new Intent(null,data);
//setResutl(resultCode,Intent)
//参数1:结果码,表明子Activity的换回状态
//(RESULT_OK正常返回数据,RESULT_CANCELED取消返回数据)
//参数2:返回值,通过Intent将数据返回到父Activity
setResult(RESULT_OK,intent);
finish();
}
});
(2)用Extra集合的形式
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("name", "Activity");
intent.putExtra("num", 2);
intent.putExtra("result", "返回");
setResult(RESULT_OK,intent);
finish();
}
});
(3)使用Bundle类
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("name", "Activity");
bundle.putInt("num", 3);
bundle.putString("result", "返回");
intent.putExtras(bundle);
setResult(RESULT_OK,intent);
finish();
}
});
3.在父Activity中获取返回值
//重载onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
TextView tv = (TextView) findViewById(R.id.textView2);
switch(requestCode){
//请求编码:父Activity发给子Activity,区分哪个子Activity返回
case 1:
if(resultCode == Activity.RESULT_OK){
//结果编码:子Activity发给父Activity,表明返回状态
Uri uriData = data.getData();
tv.setText(uriData.toString());
}
break;
case 2:
if(resultCode == Activity.RESULT_OK){
String str = data.getStringExtra("name")+data.getIntExtra("num", 0 )+
data.getStringExtra("result");
tv.setText(str);
}
break;
case 3:
if(resultCode == Activity.RESULT_OK){
Bundle bundle = data.getExtras();
String str = bundle.getString("name") + bundle.getInt("num") +
bundle.getString("result");
tv.setText(str);
}
break;
}
}