• 启动子Activity


    启动普通子Activity:

    一个activity启动另一个activity最简单的方式是使用 startActivity(Intent) 方法:

    public void startActivity(Intent intent)

    activity调用 startActivity 方法时,调用请求实际发给了操作系统的 ActivityManager ,ActivityManager 负责创建 Activity 实例,并调用其 onCreate 方法。

    ActivityManager 根据 startActivity(Intent) 方法传入的 Intent 对象来识别要启动哪个 activity ,Intent有多个构造函数,以适应不同的需求。例如:

    public Intent(Context packageContext, Class<?> cls)

     

    方法中的第二个 Class 类型参数告诉 ActivityManager 应该启动哪个 activity 。Context 参数告诉 ActivityManager 在哪里可以找到它,例如:

    Intent intent = new Intent(QuizActivity.this, CheatActivity.class);
    startActivity(intent);


    上面启动 activity 的方式,使用的是显示 Intent 。

     

    使用 Intent 对象在 Activity 之间传递信息。要向 Intent 对象中添加信息,需要调用 putExtra 方法,例如:

    public Intent putExtra(String name, boolean value)

    该方法有多种参数形式,但它总是有两个参数,第一个参数固定为 String 类型的键,第二个参数是值(可以是各种数据类型), 该方法返回 Intent 对象本身,因此可以进行链式调用。

    推荐的最佳实践:第一个参数使用被启动类中定义的常量(该常量由被启动类的全路径和键名组成),例如:

    private static final String EXTRA_ANSWER_IS_TRUE = "com.example.geoquiz.QuizActivity.answer_is_true";

    这样可以避免来自不同应用的 extra 间发生命名冲突。

    启动有返回信息的子activity:

    1. 启动方法:

    需要从子被启动的子Activity获取返回结果时,使用 startActivityForResult(Intent intent, int requestCode) 方法:

    public void startActivityForResult(Intent intent, int requestCode)

    该方法第一个参数是 Intent对象;第二个参数是 请求码(请求码是由用户定义的先发送给子 activity,然后在返回给父 activity 的整数值)。


    在一个 activity 中启动多个不同类型的子 activity,且需要判断消息返回方时,就需要用到请求码。例如:

    //定义请求码常量
    private static final int REQUEST_CODE_CHEAT = 0;
    
    
    //使用 startActivityForResult 方法启动子 activity
    startActivityForResult(intent, REQUEST_CODE_CHEAT);

    2. 子Activity设置返回值:

    实现子activity返回信息给父activity,有如下两个方法可用:

    public final void setResult(int resultCode)
    public final void setResult(int resultCode, Intent data)

    参数 resultCode 可以是一下任意一个预定义常量:

    Activity.RESULT_OK
    
    Activity.RESULT_CANCELED

    如果需要向父 activity 传递信息,则创建一个 Intent 对象,调用 activity 对象的 setResult(int, Intent) 方法将信息传递给父 activity ;如果不需要传递信息,则不用 Intent 。

    3. 获取返回信息:

    重写父 activity 中的 onActivityResult(int, int, Intent) 方法,来处理返回结果:

    protected void onActivityResult(int requestCode, int resultCode, Intent intent)

    该方法由系统调用,并传入3个参数:
      requestCode: 请求码,用于识别是启动的哪个子activity返回的信息

      resultCode: 结果码,用于识别子activity执行的操作是否成功(识别执行结果状态)

      intent: 传递信息的 Intent 对象,用于向父 activity 返回信息

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /*
        * @requestCode: 请求码,标识由哪个子activity返回
        * @resultCode: 结果码,标识子activity执行的结果状态(常用 Activity.RESULT_OK: 表示成功; Activity.RESULT_CANCELED: 表示失败)
        * @data: Intent对象,用于传递信息
        * */
        if (resultCode == Activity.RESULT_OK && requestCode == RESULT_CODE_CHEAT) {
            if (data != null) {
                boolean wasAnswerShown = CheatActivity.wasAnswerShown(data);
                mQuestionBank[mCurrentIndex].setCheated(wasAnswerShown);
            }
        }
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/yingtoumao/p/8573501.html
Copyright © 2020-2023  润新知