第二个Activity

2019-04-24  本文已影响0人  月影追猎者

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)
上一篇下一篇

猜你喜欢

热点阅读