startActivityForResul完整详解示例

MainActivity如下:

package cc.vv;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * Demo描述:
 * startActivityForResul使用示例
 *
 * 利用startActivityForResult跳转到其余Activity
 * 当第二个Activity关闭时将数据返回给第一个Activity
 * 在第二个Activity调用finish()或者按下Back键的时候回传数据
 *
 */
public class MainActivity extends Activity {
	private Button mButton;
	private int requestCode_test=9527;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mButton = (Button) findViewById(R.id.button);
		mButton.setOnClickListener(new ButtonOnClickListener());
	}

	/**
	 * 利用startActivityForResult()的方式打开一个新的Activity
	 *
	 * 注意:startActivityForResult(intent,requestCode)方法的参数
	 * requestCode表示本次startActivityForResult()操作的请求码
	 * 因为在同一个Activity中根据业务的不同,可能需要在多处
	 * 调用startActivityForResult()方法.所以为了区分每次
	 * startActivityForResult()的操作为其设置一个requestCode
	 */
	private class ButtonOnClickListener implements OnClickListener {
		public void onClick(View v) {
			Intent intent = new Intent();
			intent.setClass(getApplicationContext(), AnotherActivity.class);
			startActivityForResult(intent, requestCode_test);
		}
	}

	/**
	 * 利用onActivityResult()处理新Activity关闭时的回传数据
	 *
	 * 注意:onActivityResult(int requestCode,int resultCode,Intent data)方法的参数
	 * 1 requestCode如上描述,区分了不同的startActivityForResult()调用
	 * 2 resultCode表示新Activity中处理结果的状态.
	 *   比如某项操作是否成功,是否有异常等
	 * 3 data新Activity回传的数据
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode==requestCode_test) {
			if (resultCode==RESULT_OK) {
				System.out.println("requestCode="+requestCode+",resultCode="+resultCode);
				String name = data.getStringExtra("name");
				int age = data.getIntExtra("age", 0);
				System.out.println("回传参数:name="+name+",age="+age);
			}
		}
	}

}

AnotherActivity如下:

package cc.vv;
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;
/**
 * 当该Activity调用finish()或按下Back键时利用setResult()回传数据
 */
public class AnotherActivity extends Activity {
	private Button mButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.another);
        mButton=(Button) findViewById(R.id.closeButton);
        mButton.setOnClickListener(new ButtonOnClickListenerImpl());
	}
	private class ButtonOnClickListenerImpl implements OnClickListener{
		@Override
		public void onClick(View v) {
			setResultData();
			finish();
		}
	}

	/**
	 * 注意:
	 * onBackPressed()在源码中会调用到finish()方法.
	 * 所以将setResultData()置于super.onBackPressed()之前
	 */
	@Override
	public void onBackPressed() {
		setResultData();
		super.onBackPressed();
	}

	private void setResultData(){
		Intent intent=new Intent();
		intent.putExtra("name", "喜羊羊");
		intent.putExtra("age", 2);
		setResult(RESULT_OK, intent);
	}

}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="@string/mainActivity_tip"
        android:textSize="25sp"
        />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/button_tip"
        android:textSize="25sp"/>

</RelativeLayout>

another.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

   <TextView
       android:layout_width="200dip"
       android:layout_height="50dip"
       android:layout_centerHorizontal="true"
       android:layout_marginTop="50dip"
       android:gravity="center"
       android:text="@string/anotherActivity_tip"
       />

   <Button
       android:id="@+id/closeButton"
       android:layout_width="150dip"
       android:layout_height="50dip"
       android:layout_centerInParent="true"
       android:layout_marginTop="50dip"
       android:gravity="center"
       android:text="@string/closeActivity"
       />
</RelativeLayout>

strings.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">TestActivity3</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="button_tip">跳转到下一个Activity</string>
    <string name="mainActivity_tip">测试startActivityForResult</string>
    <string name="anotherActivity_tip">这是第二个Activity</string>
    <string name="closeActivity">关闭该Activity</string>

</resources>
时间: 2024-10-26 13:27:00

startActivityForResul完整详解示例的相关文章

Knockout数组(observable)使用详解示例_基础知识

1.简单举例 复制代码 代码如下: <script type="text/javascript">    var myObservableArray = ko.observableArray();  ///初始化一个空的数组    myObservableArray.push("Some Value");          ///向数组中添加一个项</script> 2.关键点:监控数组跟踪的是数组里的对象,而不是这些对象自身的状态.简单说,

C语言可变参数函数详解示例_C 语言

先看代码 复制代码 代码如下: printf("hello,world!");其参数个数为1个.printf("a=%d,b=%s,c=%c",a,b,c);其参数个数为4个. 如何编写可变参数函数呢?我们首先来看看printf函数原型是如何定义的.在linux下,输入man 3 printf,可以看到prinf函数原型如下: 复制代码 代码如下: SYNOPSIS#include <stdio.h>int printf(const char *form

C++第7周任务3-输出星号图详解示例

任务要求见http://blog.csdn.net/sxhelijian/article/details/8045279,本文以输出下面的星号图为例,再次体会"自顶向下,逐步求精"的设计过程. 要输出的星号图是: 将一个图,看作为6行,完成了第一级的分解,提到的算法框架为: i=1; While(i<=6) //需要输出6行 { 输出第i行; 换行: ++i: } 对于"输出第i行"的任务,可以进行细化: 先输出若干空格(多少个空格?第1行0个,第2行1个,第

Android Service详解及示例代码_Android

Android Service 详细介绍: 1.Service的概念 2.Service的生命周期 3.实例:控制音乐播放的Service 一.Service的概念 Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件. 二.Service的生命周期 Service对象不能自己启动,需要通过某个Activity.Service或者其他Context对象来启动.启动的方法有两种,Context.startS

AngularJs Using $location详解及示例代码_AngularJS

一.What does it do? $location服务分析浏览器地址栏中的URL(基于window.location),让我们可以在应用中较为方便地使用URL里面的东东.在地址栏中更改URL,会响应到$location服务中,而在$location中修改URL,也会响应到地址栏中. $location服务: 暴露当前浏览器地址栏的URL,所以我们可以 1.注意和观察URL 2.改变URL 当用户做以下操作时,与浏览器一起同步URL: 1.改变地址栏 2.单击后退或者前进按钮(或者点击一个历

Android SQLite详解及示例代码_Android

在Android中使用SQLite数据库的入门指南,打算分下面几部分与大家一起分享, 1.什么是SQLite 2.Android中使用SQLite 一.什么是SQLite SQLite是一款开源的.轻量级的.嵌入式的.关系型数据库.它在2000年由D. Richard Hipp发布,可以支援Java.Net.PHP.Ruby.Python.Perl.C等几乎所有的现代编程语言,支持Windows.Linux.Unix.Mac OS.Android.IOS等几乎所有的主流操作系统平台. SQLit

AngularJs 指令详解及示例代码_AngularJS

对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能. 首先来看个完整的参数示例再来详细的介绍各个参数的作用及用法: angular.module('myApp', []) .directive('myDirective', function() { return { restrict: String, priority: Number, terminal: Boolean, template: String or Template Function: func

php示例详解Constructor Prototype Pattern 原型模式_php实例

原型模式中主要角色 抽象原型(Prototype)角色:声明一个克隆自己的接口 具体原型(Concrete Prototype)角色:实现一个克隆自己的操作 当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现方式就是__construct()和initialize函数分开分别处理这个类的初始化,construct里面放prototype也就是公共的

Java 中的注解详解及示例代码_java

在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色 编译器指令 构建时指令 运行时指令 其中 Java内置了三种编译器指令,本文后面部分会重点介绍 Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如Apache Ant和Mav