美文网首页
第二个Activity

第二个Activity

作者: 月影追猎者 | 来源:发表于2019-04-24 21:14 被阅读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)
    

    相关文章

      网友评论

          本文标题:第二个Activity

          本文链接:https://www.haomeiwen.com/subject/cilbgqtx.html