Intent被用来连接各个Activity,也被用来在Activity之间传递数据。跳转的方法有startActivity()和startActivityForResult()。
startActivity()
从一个Activity跳转到另一个Activity传递数据分两步:
- 在起始Activity中存入待传递数据:Intent.putExtra(String K,String V)
- 在目标Activity中取出数据:Intent.getExtra()得到一个Bundle对象,该对象包含Intent携带的数据。再使用Bundle.getString(String key),通过key参数,得到key对应的值。(Bundle是一个HashMap再封装)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText et=(EditText)findViewById(R.id.edittext1);
Button btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Intent intent=new Intent();
String str=et.getText().toString();
intent.putExtra("Name", str); //传递数据
intent.setClass(MainActivity.this, Activity1.class);
startActivity(intent);
}
});
}
}
public class Activity1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
TextView tv=(TextView)findViewById(R.id.show);
Intent intent=getIntent();
Bundle bundle=intent.getExtras();//接受数据
String name=bundle.getString("Name");
tv.setText("your Info is:"+"\n"+"name : "+name);
}
}
startActivityForResult()
完成从一个页面跳转到另一个页面完成相关工作,如注册等,在注册页面完成输入等相关信息后再返回起始界面,并显示用户在注册页面输入的相关信息。其主要步骤为:
- 新建Intent,并使用startActivityForResult()方法调用。
- 重写onActivityResult(),在该方法中处理返回结果。
- 在目标Activity中,新建空指向的Activity,并绑定数据。
- 使用setResult()方法,将Intent传递到结果中。
- 调用finish()结束目标Activity。同时系统会调用重写的onActivityResult()。
onActivityResult代码如下:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
}
第一个参数是请求码,标示本次结果对应哪个请求。
第二个参数是结果码,其中RESULT_OK,代表结果返回成功。RESULT_CANCELED本次操作取消返回的值。
public class MainActivity extends Activity {
static final int REQUEST_CODE=0;//预定义请求码
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.show);
Button btn=(Button)findViewById(R.id.register);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Intent intent=new Intent();
intent.setClass(MainActivity.this, Activity1.class);
startActivityForResult(intent,REQUEST_CODE );
}
});
}
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode==REQUEST_CODE)//判断请求码是否正确
{
if(resultCode==RESULT_OK){//判断结果码是否正确
Bundle bundle=data.getExtras();
String name=bundle.getString("Name");
tv.setText("your Info is:\n"+name);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public class Activity1 extends Activity {
Button confirm;
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
et=(EditText)findViewById(R.id.edittext1);
confirm=(Button)findViewById(R.id.confirm);
confirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Intent intent=new Intent();
String name=et.getText().toString();
intent.putExtra("Name", name);
setResult(RESULT_OK, intent);//将Intent设置到结果中
finish();//结束Activity
}
});
}