我们先重点讲解如何使用Intent在多个Activity之间传递数据,根据前面的介绍我们应该已经清楚,要从Activity1传递数据到Activity2重点是startActivity()和startActivityForResult()两个方法。
1.无参数Activity跳转
Intent it = new Intent(Activity1.this, Activity2.class);
startActivity(it);
方法1 实现从Activity1直接切换到Activity2.其中 Activity1和Activity2为窗口1和窗口2的类名,注意:这两个Activity一定要在AndroidManifest.xml中注册了才能打开。
2.向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from MainActivity!");
it.putExtras("bd",bundle); // it.putExtra(“test”, "shuju”);
startActivity(it); // startActivityForResult(it,REQUEST_CODE);
方法2和方法1类似,但是实现了数据传递,注意Bundle对象类似于HashTable,可以存放一个键和对应的对象。而Intent对象也可以以键值对的方式存放bundle对象,从而实现在Activity1和
Acitivty2之间传递数据。在Activity2中可以通过以下方法获得Activity1中传递过来的数据
Intent intent = getIntent();
Bundle bd = intent.getBundleExtra("bd");// 根据bundle的key得到对应的对象
String name=bd.getString("name");
3.在Activity2中向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)
Intent intent=getIntent();
Bundle bundle2=new Bundle();
bundle2.putString("name", "This is from ShowMsg!");
intent.putExtras(bundle2);
setResult(RESULT_OK, intent);
4.Activity1中如果要根据Activity2中传入的参数进行处理,必须在Activity1中的onActivityResult进行处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==REQUEST_CODE){
if(resultCode==RESULT_CANCELED)
setTitle("cancle");
else if (resultCode==RESULT_OK) {
String temp=null;
Bundle bundle=data.getExtras();
if(bundle!=null) temp=bundle.getString("name");
setTitle(temp);
}
}
}