第二个Activity
1 创建新Activity
项目窗口 - 右键单击包 - New - Activity - Empty Activity
在manifest配置文件(AndroidManifest.xml)中声明Activity,由新建Activity向导完成。
2 启动Activity
public void startActivity(Intent intent)
调用请求发送至ActivityManager,ActivityManager负责创建Activity实例并调用其onCreate(Bundle)方法。
public Intent(Context packageContext, Class<?> class)
Class参数通知ActivityManager启动的activity,Context参数通知ActivityManager访问位置。
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
3 Activity间数据传递
将传递数据作为extra信息,附加在startActivity(Intent)的Intent中发送,extra信息可以是任意数据,包含在Intent中,由启动方activity发送。
接受方activity接收到操作系统转发的intent后,访问并获取其中的extra数据信息。
public Intent putExtra(String key, Object value)
使用包名修饰extra数据信息,以避免来自不同应用的extra间发生命名冲突。
对于SecondActivity处理extra信息的实现细节,MainActivity及应用其它代码无需知道,因此在SecondActivity中创建静态方法newIntent(Context packageContext, Object object)以封装逻辑。
public static Intent newIntent(Context packageContext, Object object) {
Intent intent = new Intent(packageContext, SecondActivity.class);
intent.putExtra(key, object);
return intent;
}
在MainActivity中以extra启动
Intent intent = SecondActivity.newIntent(MainActivity.this, object);
startActivity(intent);
从extra获取数据
public Object getObjectExtra(String key, Object defaultValue)
从子Activity获取返回结果
public void startActivityForResult(Intent intent, int requestCode)
第二个参数是请求代码,由用户定义,先发送给子Activity,再返回给父Activity,可用于一个Activity启动多个不同类型的子Activity时判断消息回馈方。
设置返回结果,实现子Activity发送返回信息给父Activity。
public final void setResult(int resultCode)
public final void setResult(int resultCode, Intent intent)
参数resultCode可以是下列任意一个预定义常量。
Activity.RESULT_OK
Activity.RESULT_CANCELED
若自定义结果代码,可使用RESULT_FIRST_USER。
在父Activity需要依据子Activity完成结果采取不同操作时,可设置结果代码。
子Activity可以不调用setResult()方法,若不需要区分附加在intent上的结果或其它信息,可由操作系统发送默认结果代码。
若子Activity以调用startActivityForResult()方法启动,则结果代码总是返回给父Activity;
在未调用startActivityForResult()方法时,若用户按后退按钮,父Activity.RESULT_CANCELED的结果代码。
返回intent,在SecondActivity中,创建一个私有方法以创建intent、附加extra并设置结果值。
Intent data = new Intent();
data.putExtra(key, object);
setResult(RESULT_OK, data);
在用户按后退键返回MainActivity时,ActivityManager调用父Activity的以下方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
该方法的参数来自MainActivity的原始请求代码及传入setResult(int, Intent)方法的结果代码与intent。
处理返回结果,在MainActivity中,新增一个成员变量保存SecondActivity回传值,重写onActivityResult()方法获取。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)