startActivityForResul完整详解示例

简介: MainActivity如下:package cc.vv;import android.os.Bundle;import android.app.
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>

相关文章
|
10月前
|
SQL PHP 数据库
19 PHP如何利用PDO获取结果集
路老师在知乎上分享了关于PHP语言的知识,帮助大家入门并深入了解PHP。本文介绍了PDO中获取结果集的三种方法:`fetch()`、`fetchAll()` 和 `fetchColumn()`,并通过具体案例展示了如何使用这些方法从数据库中获取数据并展示在网页上。
346 5
|
10月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
320 0
|
存储 安全 API
C++一分钟之-C++中的枚举类型(enum class)
【6月更文挑战第25天】C++的`enum class`(强类型枚举)在C++11中引入,增强了枚举的作用域和类型安全,减少命名冲突。它要求使用全名(如`Color::Green`)访问枚举成员,并能显式指定底层类型。常见问题包括默认值非0、隐式转换和范围溢出,解决办法是明确赋值、显式转换和选择合适底层类型。高效技巧包括用于状态机、作为函数参数、创建别名和迭代。掌握这些能提升代码质量。
484 0
|
11月前
|
编译器 API 定位技术
API和SDK的区别
API(应用程序编程接口)和SDK(软件开发工具包)的主要区别在于范围、内容、抽象程度及使用方式。API定义了软件组件间的交互规则,范围较窄,更抽象;而SDK提供了一整套开发工具,包括API、编译器、调试器等,范围广泛,具体且实用,有助于提高开发效率。
|
存储 机器学习/深度学习 人工智能
未来已来:AI技术的最新趋势与前沿探索
【7月更文第20天】在这个日新月异的时代,人工智能(AI)已经从科幻概念逐渐深入到我们日常生活的方方面面,其发展速度之快超乎想象。从基础的语音识别、图像分析到复杂的决策制定、自动驾驶,AI技术正以前所未有的力量推动着社会进步。本文将带您一同展望AI技术的未来发展方向,深入探讨量子计算、生物计算等新兴领域的前沿探索,以及它们如何重新定义AI的边界。
719 0
|
存储 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
2081 0
|
应用服务中间件 nginx
使用Nginx搭建文件服务器
之前已经出了Nginx搭建和配置的文章,所以不再赘述,如有不会搭建看下面链接:
使用Nginx搭建文件服务器
|
并行计算 开发者 Python
Python多线程和多进程在Web开发中的应用与挑战
Python多线程和多进程在Web开发中的应用与挑战
217 0