zoukankan      html  css  js  c++  java
  • Android Activity切换与Activity间数据交互

    在Android程序内部, startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念)。如下:

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    startActivity(intent);
    说明:
    1、LoginActivity.this 指明了Intent的上下文
    2、MainActivity.class 指明了要启动的子Activity的class
    3、Intent除了可以启动Activity外,还可用来启动Service、其他APP等
    4、startActivity(intent)在执行后,当前Activity将被子Activity覆盖进入暂停状态;当子Activity被关闭时,之前被覆盖的父Activity恢复继续执行。

    在父子Activity交替之际(启动子Activity时或父Activity恢复运行时),Android允许两个Activity之间进行数据交互。
    1、给新启动的子Activity传递数据
    如果给新启动的子Activity传递数据,只需要在Intent对象中加入key-value,key为准备传递数据的字符指示名称,value为准备传递的数据
    intent.putExtra(“KEY",data);
    startActivity(intent);

    在子Activity中获取传递来的数据,如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState); 
            DataType data= (DataType)getIntent().getDataTypeExtra(”KEY");
    }

    说明:

    1、在onCreate中调用

    2、DataType用你需要的数据类型替换

    ------------------------------------------------------------------------------------------------------------------------------------------

    2、从子的Activity中返回数据

    如果要在子Activity中返回数据,只需要在子Activity结束前通过Intent对象中加入key-value,如下:

    Intent intent = new Intent();
    intent.putExtra(“KEY”, data); setResult(RESULT_OK, intent);
    this.finish();

    说明:

    1、setResult(RESULT_OK, intent) 设置子Activity要返回父Activity(打开新Activity的Activity)的信息,RESULT_OK为int值,表子Activity成功执行完毕,intent里面就是包含要返回的数据。

    2、记得要关闭哦 finish()在父Activity中如果要接收子Activity的返回结果,需要使用 startActivityForResult(intent, requestCode)打开子Activity,并且要重写 onActivityResult方法

    打开子Activity并期待返回结果的代码如下:

    ............
    Intent intent = new Intent(this, DrugLibActivity.class); startActivityForResult(intent, 10);
    ............ @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (10 == requestCode) { int index = data.getIntExtra(KEY,0); }
    }

    说明:

    1、startActivityForResult 中 requestCode应该为>=0的数值(建议用常量替代更直观)

    2、onActivityResult(int requestCode, int resultCode, Intent data)在子Activtiy关闭后,requestCode为启动子Activity时的requestCode值,resultCode为子Activity setResult中设置的值。

    3、如果在同一个Activity中有多个地方可调用 startActivityForResult 打开多个子 Activity 的情况,那你应该在 onActivityResult 返回时判断 requestCode,这样你就能搞清楚是哪个子Activity返回了数据。

    4、如果在 AndroidManifest.xml 中,你准备打开并接受返回值的子Activity 被设置为 android:launchMode="singleTask"。那很遗憾告诉你,当 startActivityForResult 调用后onActivityResult 会马上执行,而此时子窗体还未返回。

    为什么会这样呢?这首先需要我们搞清楚什么是launchMode="singleTask"。

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    用 C 语言开发一门编程语言 — 字符串与文件加载
    用 C 语言开发一门编程语言 — 条件分支
    PTA刷题笔记(C语言) | 7-38 支票面额 (15分)
    PTA刷题笔记(C语言) | 7-33 统计素数并求和 (20分)
  • 原文地址:https://www.cnblogs.com/dw039/p/7411210.html
Copyright © 2011-2022 走看看