• 启动子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);
            }
        }
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    System.InvalidOperationException: 找到多个与名为“Home”的控制器匹配的类型。
    MemoryStream和FileStream
    js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用
    字符串转数组和数组转字符串
    npoi导入--从varchar数据类型到datetime数据类型转换产生一个超出范围的值问题
    IIS配置 Web部署 svg/woff/woff2字体 404错误
    委托由浅入深学习
    JavaScriptSerializer返回一条Json,页面获取值问题,数据绑定
    一文总结 CPU 基本知识
    Spring原理只要看这篇文章就够了
  • 原文地址:https://www.cnblogs.com/yingtoumao/p/8573501.html
Copyright © 2020-2023  润新知