在我们学习其他语言(javascript,C#,J2SE AWT)的时候可能会遇到模式窗体的概念,
就是一个父窗体,打开一个子窗体,关闭子窗体时候,获取父窗体界面的数值。


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

让子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的结果


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

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

❑ 请求码

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

❑ 结果码

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

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

❑ 数据

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

package com.easyway.win.model;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;/** *  *  * @Title:  * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-7-20 * @author  longgangbai * @version 1.0 */public class AndroidActivityWinModelParentActivity extends Activity {//设置标志的请求编码private static final int WIN_MODEL_REQUEST_CODE=0x234;private Button btnSetting;private EditText text;/** *  */    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.parent_layout);        btnSetting=(Button)findViewById(R.id.btnsetting);        text=(EditText)findViewById(R.id.tv_store_data);        btnSetting.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//父Activitiy向子类Activity传递数据Intent intent=new Intent(AndroidActivityWinModelParentActivity.this,AndroidActivityWinModelSonActivity.class);//设置数据信息intent.putExtra("deliverInfo","中国人民共和共");//备注此处启动方式为startActivityForResult(intent,请求编码)而不是startActivity(intent)//这是startActivityForResult和startActivity的重要区别,//1.是否传递请求编码//2.是否可以调用子类的方法startActivityForResult(intent, WIN_MODEL_REQUEST_CODE);}});    }   /**    * @param requestCode请求编码    *     * @param resultCode 响应编码    *     * @param data 子类的数据信息    *     * (non-Javadoc)    * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)    */    @Override    protected void onActivityResult(int requestCode, int resultCode,                Intent intent) {               if (requestCode == WIN_MODEL_REQUEST_CODE) {                if (resultCode == RESULT_OK) {                String content=intent.getStringExtra("settingContent");                text.setText(content);                 }           }    }}

package com.easyway.win.model;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;/** *  *  * @Title:  * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-7-20 * @author  longgangbai * @version 1.0 */public class AndroidActivityWinModelSonActivity extends Activity {private Button btnSave;private Button btnCancel;private EditText text;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //获取父窗体的intent信息        final Intent intent=getIntent();        String initText=intent.getStringExtra("deliverInfo");        setContentView(R.layout.son_layout);        btnSave=(Button)findViewById(R.id.btn_save);        btnCancel=(Button)findViewById(R.id.btn_cancel);        text=(EditText)findViewById(R.id.infoContent);        //设置初始化信息        text.setText(initText);        //添加事件        btnSave.setOnClickListener(new OnClickListener() {public void onClick(View v) {//获取用户输入信息String content=text.getText().toString();//设置在intent中存储intent.putExtra("settingContent", content);//设置回调的方法setResult(Activity.RESULT_OK, intent);//关闭当前的窗体finish();}});        btnCancel.setOnClickListener(new OnClickListener() {public void onClick(View v) {text.setText("");setResult(RESULT_CANCELED, null);   finish(); }});            }}

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical"    android:focusable="true"    android:focusableInTouchMode="true" >    <Button        android:id="@+id/btnsetting"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="设置" />    <EditText        android:id="@+id/tv_store_data"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:singleLine="false"        android:lines="5"        android:maxLines="10"         android:hint="用于存储子Activity返回的数据">            </EditText></LinearLayout>

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <EditText        android:id="@+id/infoContent"        android:layout_width="match_parent"        android:layout_height="357dp"        android:layout_weight="0.90"        android:height="600dp"        android:hint="请输入信息,点击保存传递子Activity,点击取消不传递数据,请知悉!"        android:lines="100"        android:maxLines="200" >    </EditText>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content" >        <Button            android:id="@+id/btn_save"            android:layout_width="0dip"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="保存" >        </Button>        <Button            android:id="@+id/btn_cancel"            android:layout_width="0dip"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="取消" />    </LinearLayout></LinearLayout>

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. android material design widget recyclerview
  4. android设置默认程序
  5. android的Spinner控件的自定义样式设置以及ArrayAdapter的使用
  6. Android开发:设置圆形Button
  7. Android_SQLite数据库详解
  8. Android数据存储操作
  9. Android(安卓)MatrixCursor的详解

随机推荐

  1. 【Android(安卓)Advanced Training - 05
  2. Android(安卓)8.1 来电默认全屏显示 如何
  3. Android自定义控件的使用
  4. Android的窗口机制
  5. Android API Guides--Web Apps 概述
  6. Android(安卓)Studio finish()方法的使用
  7. Android(安卓)10 startActivity 源码分析
  8. android获取cookie
  9. Android学习之 内存管理机制与应用内存优
  10. 实例5--自动换行(修订版)