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-12 21:32:33

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

完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_

为什么要写这个系列,因为百度了一下,找了很多都是些片面的Blog,拷贝来拷贝去的,写的也很粗糙. 所以,我要写这个系列,尽量把官网文档中GCD的强大功能完整的表达出来.方便自己,也方便别人,如果发现有问题,欢迎提出 本教程的计划:在完整的看过GCD的官方文档之后,我实在想不出来如何用一篇文章详细完整的写出来如此多的功能.所以,决定开一个专栏来写这个教程.计划8篇文章,分别介绍各种功能,每种功能会附上简单完整的示例代码.最后 的一篇文章会进行总结,总结出GCD的经典使用场景.源代码只提供Swift

完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f

为什么要写这个系列,因为百度了一下,找了很多都是些片面的Blog,拷贝来拷贝去的,写的也很粗糙. 所以,我要写这个系列,尽量把官网文档中GCD的强大功能完整的表达出来.方便自己,也方便别人,如果发现有问题,欢迎提出 本教程的计划:在完整的看过GCD的官方文档之后,我实在想不出来如何用一篇文章详细完整的写出来如此多的功能. 所以,决定开一个专栏来写这个教程.计划8篇文章,分别介绍各种功能,每种功能会附上简单完整的示例代码.最后 的一篇文章会进行总结,总结出GCD的经典使用场景.源代码只提供Swif

MediaPlayer 状态机 API 详解 示例

简介 public class android.media.MediaPlayer extends Object implements VolumeAutomation 可能需要的权限: One may need to declare a corresponding(相应) WAKE_LOCK permission <uses-permission> element. <uses-permission android:name="android.permission.WAKE_

完整详解GCD系列(三)-dispatch_group

原创Blog,转载请注明出处 http://blog.csdn.net/column/details/swift-gcd.html 一.dispatch_group 把一组任务提交到队列中,这些队列可以不相关,然后坚挺这组任务完成的事件. 几个用到的函数 1.dispatch_group_create创建一个调度任务组 func dispatch_group_create() -> dispatch_group_t! 2.dispatch_group_async 把一个任务异步提交到任务组里 f

monkey基本命令参数详解示例

Monkey基本命令参数 参数名 基本功能 举例 -p 参数-p用于约束限制,用此参数指定一个或多个包(Package,即App).指定 包之后,Monkey将只允许系统启动指定的APP.如果不指定包,Monkey将允许系统启动设备中的所有APP. *指定一个包: adb shell monkey -p com.htc.Weather  100  说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件). *指定多个包:adb shell mo

完整详解GCD系列(四)dispatch_semaphore(信号量)

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 一 何为信号量? 简单来说就是控制访问资源的数量,比如系统有两个资源可以被利用,同时有三个线程要访问,只能允许两个线程访问,第三个应当等待资源被释放后再访问. 注意:再GCD中,只有调度的线程在信号量不足的时候才会进入内核态进行线程阻塞 二 如何使用信号量 三个主要函数 创建一个信号量 func dispatch_semaphore_create(_ value: In

完整详解GCD系列(二)dispatch_after;dispatch_apply;dispatch_once

一.dispatch_after 功能:延迟一段时间把一项任务提交到队列中执行,返回之后就不能取消 常用来在在主队列上延迟执行一项任务 函数原型 [plain] view plaincopy func dispatch_after(_ when: dispatch_time_t, _ queue: dispatch_queue_t!, _ block: dispatch_block_t!) 参数 [plain] view plaincopy when 过了多久执行的时间间隔 queue   提交

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 *format, ...); 后面的三个点...

winreg操作windows注册表详解示例

#coding:utf-8 #=====================================================================#=====本程序演示了WINREG操作WINDOWS注册表的所有常见操作#=====作者:dengpeiyou QQ:86074731 2019.01.12#=====================================================================import ctypesimpo