Android中父子窗体调用类似模式窗体应用
在我们学习其他语言(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>
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- android material design widget recyclerview
- android设置默认程序
- android的Spinner控件的自定义样式设置以及ArrayAdapter的使用
- Android开发:设置圆形Button
- Android_SQLite数据库详解
- Android数据存储操作
- Android(安卓)MatrixCursor的详解