`
wtrlay
  • 浏览: 23017 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

启动另外一个Activity,并返回结果

阅读更多
大致步骤
1.启动另外一个Activity,这里称子Activity;
2.子Activity通过setResult方法设置返回结果,setResult方法带两个参数:结果码和表示为Intent的负载值;
3.父Activity通过onActivityResult方法处理子Activity返回的结果

让子Activity有返回值
   
使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会给父Activity提供任何反馈。
你可以启动一个Activity作为子Activity,它与父Activity有内在的联系。当子Activity关闭时,它会触发父Activity中的一个事件处理函数。子Activity最适合用在一个Activity为其它的Activity提供数据(例如用户从一个列表中选择一个项目)的场合。

子Activity的创建和普通Activity的创建相同,也必须在应用程序的manifest中注册。任何在manifest中注册的Activity都可以用作子Activity。

启动子Activity

startActivityForResult方法和startActivity方法工作很相似,但有一个很重要的差异。Intent都是用来决定启动哪个Activity,你还可以传入一个请求码。这个值将在后面用来作为有返回值Activity的唯一ID。

下面的代码显示了如何启动一个子Activity:

private static final int SHOW_SUBACTIVITY = 1;

Intent intent = new Intent(this, MyOtherActivity.class);

startActivityForResult(intent, SHOW_SUBACTIVITY);


和正常的Activity一样,子Activity可以隐式或显式启动。下面的框架代码使用一个隐式的Intent来启动一个新的子Activity来挑选一个联系人:

private static final int PICK_CONTACT_SUBACTIVITY = 2;

Uri uri = Uri.parse(“content://contacts/people”);

Intent intent = new Intent(Intent.ACTION_PICK, uri);

startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);


返回值

当子Activity准备关闭时,在finish之前调用setResult来给调用的Activity返回一个结果。

setResult方法带两个参数:结果码和表示为Intent的负载值。结果码是运行子Activity的结果,一般是Activity.RESULT_OK或Activity.RESULT_CANCELED。在一些情况下,你会希望使用自己的响应代号来处理特定的应用程序的选择;setResult支持任何整数值。

作为结果返回的Intent可以包含指向一个内容(例如联系人,电话号码或媒体文件)的URI和一组用来返回额外信息的Extra。

接下来的代码片段节选自子Activity的onCreate方法,显示了怎样向调用的Activity返回不同的结果:

Button okButton = (Button) findViewById(R.id.ok_button);

okButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) 

{

Uri data = Uri.parse(“content://horses/” + selected_horse_id);

Intent result = new Intent(null, data);

result.putExtra(IS_INPUT_CORRECT, inputCorrect);

result.putExtra(SELECTED_PISTOL, selectedPistol);

setResult(RESULT_OK, result);

finish();

}

});

Button cancelButton = (Button) findViewById(R.id.cancel_button);

cancelButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) 

{

setResult(RESULT_CANCELED, null);

finish();

}

});




处理子Activity的结果


当子Activity关闭时,它的父Activity的onActivityResult事件处理函数被触发。

重写这个方法来处理从子Activity返回的结果。onActivityResult处理器接受好几个参数:

❑ 请求码

曾经用来启动子Activity的请求码。

❑ 结果码

结果码是由子Activity设置的,用来显示它的结果。它可以是任何整数值,但典型的值是Activity.RESULT_OK和Activity.RESULT_CANCELLED。

如果子Activity非正常关闭或在关闭时没有指定结果码,结果码都是Activity.RESULT_CANCELED。

❑ 数据

一个Intent来打包任何返回的数据。依赖于子Activity的目的,它可能会包含一个代表特殊的从列表中选择的数据的URI。可变通的,或额外的,子Activity可以使用“extras”机制以基础值的方式返回临时信息。

下面的框架代码实现了一个Activity中的onActivityResult事件处理函数:

private static final int SHOW_SUB_ACTIVITY_ONE = 1;

private static final int SHOW_SUB_ACTIVITY_TWO = 2;

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch(requestCode) 

{

case (SHOW_SUB_ACTIVITY_ONE) : 

{

if (resultCode == Activity.RESULT_OK) 

{

Uri horse = data.getData();

boolean inputCorrect = data.getBooleanExtra(IS_INPUT_CORRECT, false);

String selectedPistol = data.getStringExtra(SELECTED_PISTOL);

}

break;

}

case (SHOW_SUB_ACTIVITY_TWO) : 

{

if (resultCode == Activity.RESULT_OK) 

{

// TODO: Handle OK click.

}

break;

}

}

}
分享到:
评论

相关推荐

    如何启动另外一个应用的任意Activity

    如果需要启动的Activity返回结果,可以使用startActivityForResult()方法,并重写onActivityResult()来接收结果。 总结,启动另一个应用的任意Activity主要依赖于Intent对象,通过设置Action、Data、Category等属性...

    activity值传递

    当需要从第二个Activity返回结果到第一个Activity时,可以使用startActivityForResult()方法启动第二个Activity,并在第二个Activity中调用setResult()方法设置结果,最后在第一个Activity的onActivityResult()方法...

    通过Intent实现Activity之间的切换,并传递数据

    当从一个Activity返回到另一个Activity时,可以通过startActivityForResult()启动,然后在原Activity中重写onActivityResult()方法,接收返回的数据。 通过以上内容,我们可以了解到Intent在Android开发中的核心...

    安卓启动退出网络判断相关-Activity启动和退出动画.zip

    实现这些动画主要通过修改AndroidManifest.xml中的activity标签,添加android:theme属性,并指定一个包含动画资源的主题。另外,还可以在Activity的onCreate()和onDestroy()方法中动态设置动画效果,使用Animation类...

    Android一个apk启动另外一个apk

    在启动另一个APK的Activity时,我们需要创建一个Intent,并设置相应的参数。 1. **创建Intent**: 首先,你需要创建一个Intent对象,使用`Intent()`构造函数。如果知道被启动的Activity的类名,可以使用`...

    android实现多个Activity滑动效果

    这样,我们可以在一个Activity中包含多个Fragment,而不是创建多个独立的Activity,从而实现滑动效果。 以下是一些实现步骤: 1. **设置布局**:在主Activity的布局文件中,添加一个`ViewPager`,它可以承载多个`...

    android之activity跳转 窗口跳转

    当一个Activity启动另一个Activity时,新的Activity会被压入栈顶,按后进先出(LIFO)原则处理。按下Back键时,栈顶的Activity会被弹出,回到前一个Activity。 在SwitchMulActivity这样的场景下,可能涉及到多个...

    Android-拍照并跳转到另外的activity

    在Android开发中,"Android-拍照并跳转到另外的activity"这个主题涉及到的是如何在应用程序中集成相机功能,并在用户拍摄照片后,将图片数据传递到下一个Activity进行展示。这个过程涵盖了Android权限管理、Intent...

    Android的Activity的Launch模式之SingleInstance案例

    3. **回退栈管理**:由于拥有独立的任务栈,当用户按返回键时,会直接退出到系统主屏幕,而非回退到前一个Activity。 **二、SingleInstance模式的应用场景** `SingleInstance`模式常用于那些需要保持数据一致性的...

    Android开发 两个Activity之间通过Intent跳转传值

    要从源Activity(SourceActivity)向目标Activity(TargetActivity)传递数据,首先创建一个Intent实例: ```java Intent intent = new Intent(SourceActivity.this, TargetActivity.class); ``` 接着,使用`...

    暂停和恢复Activity-Pausing and Resuming an Activity

    在暂停状态下,Activity仍然是部分可见的,但如果Activity被完全遮挡而不可见,它就会进入停止状态,这通常发生在新的Activity启动覆盖了前一个Activity的情况下。在Activity暂停期间,系统会调用onPause()方法,这...

    android-页面跳转-Activity&Intent详解,Bundle类介绍说明.doc

    Intent 可以理解为一个“意图”,即从一个 Activity 跳转到另外一个 Activity 的意图。Intent 可以分为两种:显式 Intent 和隐式 Intent。 显式 Intent 是通过明确指定要启动的 Activity 的类名来实现的,例如:`...

    android应用跳转界面

    这段代码首先创建了一个Intent实例,指明了起点(MainActivity)和终点(DetailActivity),然后调用`startActivity()`方法启动新的Activity。注意,这里的`MainActivity.this`是当前Activity的上下文对象,它是创建...

    android 面试

    android 面试 1. 请描述下Activity的生命周期。  答:onCreate()... onDestroy()Activity从栈中取出时调用,也可以说从第二个Activity返回第一个Activity时,会调用第二个Activity的onDestroy(),销毁Activity

    Android 启动另一个App/apk中的Activity实现代码

    在Android开发中,启动另一个应用程序中的Activity是一项常用的技术,它允许我们的应用与系统中的其他应用进行交互,增强用户体验。在上述描述中,提到了两种主要的启动方式:通过`ACTION_VIEW`和通过设置`Intent`的...

    安卓安装卸载相关-Android中应用程序Activity管理类用于Activity管理和应用程序退出。.zip

    另外,为了提供良好的用户体验,开发者需要遵循最佳实践来设计Activity的启动模式,以防止栈顶堆叠过多导致用户难以返回上一级或退出应用。 最后,描述中提到的部分代码可能需要自行调试才能运行,这反映了Android...

    Android_activity

    在Android应用开发中,`Activity`是至关重要的一个概念,它是用户界面的主要承载者,用于显示用户可以看到并与其交互的各种视图。`Activity`的概念理解以及如何使用它,对于任何Android开发者,尤其是初学者,都是...

    Android学习小结之获取被启动的Activity传回的数据

    这个方法用于启动一个新的Activity,并在完成特定任务后返回结果。它需要两个参数:`Intent`对象,用于启动新的Activity;以及一个请求码(`requestCode`),用于在`onActivityResult()`方法中识别返回的数据来源。 ...

    Activity生命周期详解

    在这个例子中,我们创建了一个名为`LifeCycleActivity`的`Activity`类,并在每个生命周期回调方法中记录了日志消息。这样可以帮助开发者跟踪`Activity`的生命周期状态变化,并据此调整代码逻辑。 总结来说,理解`...

    Android Activity的跳转与传值详解

    Android Activity的跳转与传值详解 Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。  ...从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activi

Global site tag (gtag.js) - Google Analytics