Android中父子窗体调用类似模式窗体应用

news/2024/7/6 4:42:41

   在我们学习其他语言(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>

 


http://www.niftyadmin.cn/n/4565889.html

相关文章

简易的app

//导包 const express require(express) const bodyParser require(body-parser) const path require(path) var multer require(multer) const { cpuUsage } require(process) const { fstat } require(fs)//用包创建一个文件夹 var upload multer({data:uploads/})//导…

Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传...

做一个文件上传到服务器端可能需要以下几点知识&#xff0c;如下&#xff1a; 1.HTTP multipart/form-data 上传报文格式实现手机端上传&#xff1a; 2.选择图片&#xff0c;采用android中父子窗体回调的模式窗体。 3.android 中AsyncTask的使用 4.服务端fileupload文件读写 效…

同源与不同源

同源 - 协议和地址和端口都一样 不同源 - 协议和地址和端口&#xff0c;只要有一个不同就不同源 解决跨域问题 //设置响应头&#xff0c;允许资源被访问/共享 res.setHeader(‘Access-Control-Allow-Origin’,’*’)//表示所有的请求路径都可以请求这个接口 //中间件 //使用…

Android文件图片上传的详细讲解(二)--AsyncTask的用法

AsyncTask的用法 AsyncTask的用法 在开发Android应用时必须遵守单线程模型的原则&#xff1a; Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则&#xff1a; 1. 不要阻塞UI线程 2. 确保只在UI线程中访问Android UI…

cookie工作流程

类比于后台服务器的使用 //登录接口 app.get(/login,(req,res)>{//假如现在这里已经验证了账号和密码&#xff0c;是正确的&#xff0c;是可以登录的//服务器就会吧cookie响应回去res.writeHead(200,{Content-Type:text/plain; charsetutf-8,"Set-Cookie":userid…

Android文件图片上传的详细讲解(四)---服务端编码

服务端上传采用commons-fileupload上传相关的文件。 package com.easyway.fileupload;import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; i…

英雄管理系统

CSS内容 add.html <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"width…

[转] 搭建XMPP协议,实现自主推送消息到手机

关于服务器端向Android客户端的推送&#xff0c;主要有三种方式&#xff1a;1.客户端定时去服务端取或者保持一个长Socket&#xff0c;从本质讲这个不叫推送&#xff0c;这是去服务端拽数据。但是实现简单&#xff0c;主要缺点&#xff1a;耗电等2.Google的C2DM&#xff0c;具体…