大致步骤:
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返回结果,可以使用startActivityForResult()方法,并重写onActivityResult()来接收结果。 总结,启动另一个应用的任意Activity主要依赖于Intent对象,通过设置Action、Data、Category等属性...
当需要从第二个Activity返回结果到第一个Activity时,可以使用startActivityForResult()方法启动第二个Activity,并在第二个Activity中调用setResult()方法设置结果,最后在第一个Activity的onActivityResult()方法...
当从一个Activity返回到另一个Activity时,可以通过startActivityForResult()启动,然后在原Activity中重写onActivityResult()方法,接收返回的数据。 通过以上内容,我们可以了解到Intent在Android开发中的核心...
实现这些动画主要通过修改AndroidManifest.xml中的activity标签,添加android:theme属性,并指定一个包含动画资源的主题。另外,还可以在Activity的onCreate()和onDestroy()方法中动态设置动画效果,使用Animation类...
在启动另一个APK的Activity时,我们需要创建一个Intent,并设置相应的参数。 1. **创建Intent**: 首先,你需要创建一个Intent对象,使用`Intent()`构造函数。如果知道被启动的Activity的类名,可以使用`...
这样,我们可以在一个Activity中包含多个Fragment,而不是创建多个独立的Activity,从而实现滑动效果。 以下是一些实现步骤: 1. **设置布局**:在主Activity的布局文件中,添加一个`ViewPager`,它可以承载多个`...
当一个Activity启动另一个Activity时,新的Activity会被压入栈顶,按后进先出(LIFO)原则处理。按下Back键时,栈顶的Activity会被弹出,回到前一个Activity。 在SwitchMulActivity这样的场景下,可能涉及到多个...
在Android开发中,"Android-拍照并跳转到另外的activity"这个主题涉及到的是如何在应用程序中集成相机功能,并在用户拍摄照片后,将图片数据传递到下一个Activity进行展示。这个过程涵盖了Android权限管理、Intent...
3. **回退栈管理**:由于拥有独立的任务栈,当用户按返回键时,会直接退出到系统主屏幕,而非回退到前一个Activity。 **二、SingleInstance模式的应用场景** `SingleInstance`模式常用于那些需要保持数据一致性的...
要从源Activity(SourceActivity)向目标Activity(TargetActivity)传递数据,首先创建一个Intent实例: ```java Intent intent = new Intent(SourceActivity.this, TargetActivity.class); ``` 接着,使用`...
在暂停状态下,Activity仍然是部分可见的,但如果Activity被完全遮挡而不可见,它就会进入停止状态,这通常发生在新的Activity启动覆盖了前一个Activity的情况下。在Activity暂停期间,系统会调用onPause()方法,这...
Intent 可以理解为一个“意图”,即从一个 Activity 跳转到另外一个 Activity 的意图。Intent 可以分为两种:显式 Intent 和隐式 Intent。 显式 Intent 是通过明确指定要启动的 Activity 的类名来实现的,例如:`...
这段代码首先创建了一个Intent实例,指明了起点(MainActivity)和终点(DetailActivity),然后调用`startActivity()`方法启动新的Activity。注意,这里的`MainActivity.this`是当前Activity的上下文对象,它是创建...
android 面试 1. 请描述下Activity的生命周期。 答:onCreate()... onDestroy()Activity从栈中取出时调用,也可以说从第二个Activity返回第一个Activity时,会调用第二个Activity的onDestroy(),销毁Activity
在Android开发中,启动另一个应用程序中的Activity是一项常用的技术,它允许我们的应用与系统中的其他应用进行交互,增强用户体验。在上述描述中,提到了两种主要的启动方式:通过`ACTION_VIEW`和通过设置`Intent`的...
另外,为了提供良好的用户体验,开发者需要遵循最佳实践来设计Activity的启动模式,以防止栈顶堆叠过多导致用户难以返回上一级或退出应用。 最后,描述中提到的部分代码可能需要自行调试才能运行,这反映了Android...
在Android应用开发中,`Activity`是至关重要的一个概念,它是用户界面的主要承载者,用于显示用户可以看到并与其交互的各种视图。`Activity`的概念理解以及如何使用它,对于任何Android开发者,尤其是初学者,都是...
这个方法用于启动一个新的Activity,并在完成特定任务后返回结果。它需要两个参数:`Intent`对象,用于启动新的Activity;以及一个请求码(`requestCode`),用于在`onActivityResult()`方法中识别返回的数据来源。 ...
在这个例子中,我们创建了一个名为`LifeCycleActivity`的`Activity`类,并在每个生命周期回调方法中记录了日志消息。这样可以帮助开发者跟踪`Activity`的生命周期状态变化,并据此调整代码逻辑。 总结来说,理解`...
Android Activity的跳转与传值详解 Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。 ...从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activi