Android 子activity关闭 向父activity传值

   

使用startActivity方式启动的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;

}

}

}

时间: 2024-07-31 13:14:07

Android 子activity关闭 向父activity传值的相关文章

android-在 Android 中如何关闭所有的 Activity

问题描述 在 Android 中如何关闭所有的 Activity 如果退出应用程序时能清除该应用的所有Activity,那么下次打开的时候就可以从第一个 Activity 开始了.但现在调用 Finish 方法只能退出当前的 Activity .怎么样才能在关闭应用的时候,把所有Activity都关闭? 解决方案 第一种: //跳转到主界面(android2.2) Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCa

vb.net向父窗体传值-在vb.net中,子窗体如何向父窗体传值

问题描述 在vb.net中,子窗体如何向父窗体传值 多个窗体的变量对应的是多个SQL的视图(每个窗体变量数不同),当主窗体打开后OPC连接,打开子窗体(只能打开一个窗体),子窗体中_Load下读取的SQL视图变量名并读入一数组a(n)(全局变量)中,子窗体打开后,主窗体将a(n)读入b(n),并依据这些变量名寻找对应WINCC中的值.可是我的主窗体中应把判定子窗体是否打开的脚本写在什么事件下好呢,同时,我的OPC连接是不是也不能写在Form_Load下了,求高手指点. 解决方案 [VB.NET]

ie 8-js子窗口关闭刷新父窗口

问题描述 js子窗口关闭刷新父窗口 使用window.showModalDialog("uploadFile.jsp",null,"dialogWidth=400px;dialogHeight=250px"); 方式弹出的一个子窗口, 我需要用子窗口控制刷新父窗口然后关闭子窗口, window.parent.dialogArguments.document.execCommand('Refresh'); window.close(); ie8下执行不成功 解决方案

在父窗口上弹出子窗口,子窗口关闭刷新父窗口

问题描述 一.父窗口上:<ahref="#"onclick="OpenWin(this)"srclink="<%#"Employee_Update.aspx?E_id="+Eval("E_id")%>">修改</a>对应的JS:<script>functionOpenWin(obj){varlink=obj.srclink;varheight=parseInt

不能通过finishAcitivity从当前activity关闭另一个activity吗?

问题描述 android-sdk-doc中写得很清楚:public void finishActivity (int requestCode) Force finish another activity that you had previously started with startActivityForResult(Intent, int).ParametersrequestCode The request code of the activity that you had given t

子窗口关闭后父窗口数据更新问题

问题描述 今天写了个简单的通讯录小应用程序,新增和编辑按钮会弹出一个窗口供添加联系人或编辑用的,但是在提交后,之前那个主窗口数据没有更新过来,需要点击查询等按钮执行一次更新才可以.这个BUG怎么修正,用手机敲的,希望得到解答,谢谢!下面是局部代码:Main.javamodify(eve){OperationDialog od = new OperationDialog(this);od.setModal(true);od.initData(aid);od.setVisible(true);ini

Android子控件超出父控件的范围显示出来方法

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:clipChildren="false">       <ImageView

Android开发中Activity创建跳转及传值的方法_Android

在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider). 今天所介绍的就是Android开发中的四大组件之一:Activity,其他那三大组件以后再进行介绍.说道Android中的Activity,如果你做过iOS开发的话,Activity类似于iOS中的ViewController(视图控制器).在应用中能看到的东西都是放在活动中的.活动是安卓开发比较重要的东

android Activity关闭动画 附左右动画anim

大家好,android启动和关闭activity时是可以加上动画效果的,添加起来也非常的简单,相信稍微懂一点儿开发的就知道如何添加,例如启动某一个Activity时在startActiviy的后面加上如下代码: [java] view plaincopy overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);   这样启动时就会显示我们预先定义好的动画文件. 关闭Activity,也就是在调用finish()之后