`
longgangbai
  • 浏览: 7340201 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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() {
			@Override
			public 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>

 

分享到:
评论

相关推荐

    父子窗体的调用 c#

    在C#编程中,"父子窗体的调用"是一个常见的功能需求,特别是在开发桌面应用程序时,例如Windows Forms或WPF应用。这个概念涉及到一个窗口(父窗体)如何启动、控制和通信与另一个窗口(子窗体)。下面将详细阐述这一...

    vb父子窗体实例

    在VB(Visual Basic)编程中,父子窗体的概念是用于构建多窗口应用程序的一种常见方法。这种设计模式允许主窗体(父窗体)控制和显示一个或多个子窗体,通常用于实现模块化的用户界面。在给定的“vb父子窗体实例”中...

    WPF父子窗体传输示例

    在Windows Presentation Foundation (WPF) 中,父子窗体之间的数据通信是常见的应用场景,尤其是在构建复杂的用户界面时。本文将深入探讨如何在WPF中实现父子窗体的数据传递,包括父窗体向子窗体传递参数以及子窗体...

    mfc的父子窗体调用

    此程序目的主要演示父子窗体的调用,另外演示按钮事件驱动向文本框里面填写文本 ,此程序主要参考http://blog.csdn.net/kingsollyu/article/details/8312910

    C#实现父子窗体全传值案例

    总之,"C#实现父子窗体全传值案例"涵盖了窗口交互、模态对话框使用以及数据传递等多个关键点,这些都是在开发C#桌面应用程序时不可或缺的知识。通过深入理解并实践这些概念,开发者能够构建更加灵活和健壮的应用程序...

    C#计算器(窗体 附加父子窗体)

    C#是编程语言,窗体是用户界面的基础,计算器是具体的应用实例,而父子窗体则是设计模式。 在压缩包内的“calculator”文件可能包含了项目的源代码,包括`.cs`文件(C#源代码文件),`.Designer.cs`文件(由Visual ...

    QT 父子窗体相互按钮调用

    在QT编程中,父子窗体的概念是常见的交互设计模式,特别是在C++或C#的后端开发中。这里我们主要探讨如何实现标题所描述的功能,即通过点击父窗体按钮来隐藏当前窗体并显示子窗体,以及从子窗体点击后返回到父窗体。...

    MDI父子窗体的设计

    MDI(Multiple Document Interface)是Windows应用程序中的一种设计模式,允许在一个父窗口内同时打开多个子窗口,每个子窗口可以独立显示和操作不同的文档。在C#编程中,MDI父窗体和子窗体的设计是一项重要的技能,...

    父子窗体滚动条支持鼠标滚轮移动

    本项目涉及的主题是“父子窗体滚动条支持鼠标滚轮移动”,这是一个关于用户界面交互优化的问题,特别是如何在多层嵌套的窗口结构中实现更流畅的滚动体验。 在Delphi中,窗体(Form)是程序的基本组成部分,它可以...

    父子窗体刷新.zip

    在Windows Forms(WinForms)开发中,父子窗体交互是一个常见的需求,特别是在设计多窗口应用程序时。本示例探讨了如何使用委托来实现WinForms中父子窗体之间的数据同步和界面刷新。首先,我们理解“父子窗体”:父...

    C#非模式子窗体刷新父窗体内容

    2. **父子窗体关系的建立**: - 要使子窗体能够访问并操作父窗体,需要在子窗体的构造函数中传递父窗体的引用。 - 例如: ```csharp public ChildForm(Form parent) { InitializeComponent(); this....

    C#通过子窗体刷新父窗体

    总结来说,C#中实现子窗体刷新父窗体主要依赖事件机制,通过定义事件、触发事件、订阅事件以及处理事件来实现父子窗体间的通信。这一机制不仅适用于VS2008,也是.NET框架下通用的窗体交互方式。理解并掌握这一机制,...

    c#记事本,MDI窗体应用

    1. **父子窗体间通信**:通常,父窗体可以访问其所有子窗体,因此可以直接调用子窗体的公共方法或属性来传递数据。例如,父窗体可以通过子窗体实例的事件处理或方法调用来接收或发送信息。 2. **子窗体间的通信**:...

    C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子.pdf

    在C#的WinForm应用程序开发中,可以通过在父窗体内嵌入子窗体来构建复杂的用户界面。嵌入子窗体通常用于实现模块化的功能展示或进行任务的分流处理,父窗体可以是MDI(Multiple Document Interface)形式,这允许在...

    C++调用子窗体

    在C++编程中,"C++调用子窗体"是一个常见的需求,特别是在开发桌面应用程序时。不基于MFC(Microsoft Foundation Classes)的窗口调用意味着我们将使用更底层的API,如Win32 API,来创建和管理窗口。VC++6.0是一个...

    JavaScript父子窗体间的调用方法

    本文实例讲述了JavaScript父子窗体间的调用方法。分享给大家供大家参考。具体如下: 如果要打开一个新窗口,使用 window.open( ) 方法。 如果要关闭自身窗口,使用 window.close( ) 方法。 一、父窗体 为了便于父...

    delphi不同窗体的变量传递

    在Delphi编程环境中,窗体间的变量传递是一个常见的需求,特别是在多窗体应用程序中。它涉及到如何在不同的窗体之间共享数据,以便于用户在不同的界面间切换时保持信息的一致性。本篇文章将深入探讨如何在Delphi中...

    父子窗体间传递JSON格式的数据的代码

    在开发基于Web的应用程序中,父子窗体之间的数据传递是一个常见需求,特别是在涉及用户操作流程时,比如评分操作。本例中,通过用户选择用户名触发操作,并弹出子窗体进行评分,子窗体完成操作后需要将数据传回父...

    winform跨页面调父父级窗体小示例

    在WinForm应用中,一个窗体(Form)可以打开另一个窗体作为它的子窗体,形成父子窗体的关系。子窗体可以通过`this.Parent`属性访问其直接父窗体,但没有内置的方法直接访问更高级别的父窗体。因此,为了跨多个父级...

    C#窗体间调用,通信方法总结

    在实际应用中,可能需要采用事件驱动或其他设计模式来降低这种耦合性,例如使用委托或事件来处理数据交换,使得窗体间的通信更加灵活和可维护。 总的来说,C#窗体间的通信主要依赖于`Owner`或`ParentForm`属性,...

Global site tag (gtag.js) - Google Analytics