一、使用Intent
在 Android 中,不同的 Activity 实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在 Activity 之间传递消息。Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容。
只是打开另一个Activity,不传递数据:
//新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
startActivity(new Intent(MainActivity.this, OtherActivity.class));
1)把数据传递给新的Activity:
-- 传递数据的Activity中:
Intent intent=new Intent(MainActivity.this, OtherActivity.class);
//Bundle类用作携带数据
Bundle bundle=new Bundle();
bundle.putString("name", "zhangsan");
bundle.putInt("age", 18);
//附带数据
intent.putExtras(bundle);
//打开另一个Activity,此时把Intent传递过去
startActivity(intent);
-- 接收数据的Activity中:
//在被打开的Activity中接收前面Activity传递过来的参数
Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("name");
Integer age=bundle.getInt("age");
这样就完成了一次Activity之间的通信。
2)打开一个Activity并且在新Activity调用finish方法的时候将数据传回旧的Activity中
-- 用startActivityForResoult方法打开一个新的Activit
//新建一个显式意图,第一个参数为intent对象,第二个参数为请求码用来在回调函数中区分是哪个Activity回调的
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
//新Activity调用finish方法的时候将数据传回旧的Activity中,三个参数分别是请求码,结果码,携带数据的Intentprotected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case 1:
//获取保存的数据
String getData = data.getStringExtra("first");
break;
}
}
-- 被打开的Activity中
Intent intent = new Intent();
//添加数据intent.putExtra("first", "first");
//设置返回码和携带数据的intentsetResult(MainActivity.RESULT_OK, intent);
finish();
二、Android 提供了包括 SharedPreferences 在内的很多种数据存贮方式,比如 SQLite,文件等,程序员可以通过这些 API 实现 Activity 之间的数据交换。如果必要,我们还可以使用 IPC 方式。