startActivityForResult详解

在启动另外一个Activity的时候,有两种方法,一种是直接使用startActivity,另外一种就是使用startActivityForResult。本文主要通过一个Demo来学习一下第二种。

startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法,所以我们可以重写一下这个方法。直接看代码吧:

第一个页面代码:

 1
 2  3
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 import android.widget.TextView;
11
12 public class TestStartActivityForResultActivity extends Activity implements
13         OnClickListener {
14     private TextView mText01;
15     private TextView mText02;
16     private Button button01;
17     private Button button02;
18     private Intent mIntent;
19     private int requestCode;
20
21     /** Called when the activity is first created. */
22     @Override
23     public void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.main);
26         mText01 = (TextView) findViewById(R.id.mText01);
27         mText02 = (TextView) findViewById(R.id.mText02);
28         button01 = (Button) findViewById(R.id.mButton01);
29         button02 = (Button) findViewById(R.id.mButton02);
30         button01.setOnClickListener(this);
31         button02.setOnClickListener(this);
32         mText01.setText("01");
33         mText02.setText("02");
34
35         mIntent = new Intent();
36         mIntent.setClass(TestStartActivityForResultActivity.this,
37                 Activity02.class);
38     }
39
40     @Override
41     public void onClick(View v) {
42         switch (v.getId()) {
43         case R.id.mButton01:
44             // 请求码的值随便设置,但必须>=0
45             requestCode = 0;
46             startActivityForResult(mIntent, requestCode);
47             break;
48         case R.id.mButton02:
49             requestCode = 2;
50             startActivityForResult(mIntent, requestCode);
51             break;
52         default:
53             break;
54         }
55     }
56
57     // 回调方法,从第二个页面回来的时候会执行这个方法
58     @Override
59     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
60         String change01 = data.getStringExtra("change01");
61         String change02 = data.getStringExtra("change02");
62         // 根据上面发送过去的请求吗来区别
63         switch (requestCode) {
64         case 0:
65             mText01.setText(change01);
66             break;
67         case 2:
68             mText02.setText(change02);
69             break;
70         default:
71             break;
72         }
73     }
74 }

第一个页面布局文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7 <TextView
 8     android:id="@+id/mText01"
 9     android:layout_width="fill_parent"
10     android:layout_height="wrap_content"
11     />
12 <TextView
13     android:id="@+id/mText02"
14     android:layout_width="fill_parent"
15     android:layout_height="wrap_content"
16     />
17 <Button
18     android:id="@+id/mButton01"
19     android:layout_width="fill_parent"
20     android:layout_height="wrap_content"
21     android:text="改变第一行文本的值"
22     />
23 <Button
24     android:id="@+id/mButton02"
25     android:layout_width="fill_parent"
26     android:layout_height="wrap_content"
27     android:text="改变第二行文本的值"
28     />
29 </LinearLayout>  

第二个页面代码:

 1 import android.app.Activity;
 2 import android.content.Intent;
 3 import android.os.Bundle;
 4
 5 public class Activity02 extends Activity {
 6     private int resultCode = 0;
 7
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity02);
12         Intent mIntent = new Intent();
13         mIntent.putExtra("change01", "1000");
14         mIntent.putExtra("change02", "2000");
15         // 设置结果,并进行传送
16         this.setResult(resultCode, mIntent);
17         // this.finish();
18     }
19
20 }  

第二个页面布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="文本的值已经改变"
    />
</LinearLayout> 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.sunchao"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />  

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TestStartActivityForResultActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Activity02" />  

    </application>
</manifest>  
时间: 2024-10-26 08:42:19

startActivityForResult详解的相关文章

startActivityForResult和setResult详解

原文:startActivityForResult和setResult详解 startActivityForResult与startActivity的不同之处在于:1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ).2.startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activit

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

【数据】Activity数据返回——startActivityForResult()用法详解

上一节我以"计算男女生标准体重"为例详细介绍了如何使用Intent.Bundle等实现不同Activity之间数据的传递问题,本节将仍以"计算男女生标准体重"为例详细介绍如何利用startActivityForResult()实现数据的返回,即从第二页面返回第一页面. 一.目标 如下图,用户在第一个页面填写完数据后点击"计算"按钮,程序跳转到第二个页面,并显示计算结果.在用户点击第二个页面的"返回计算结果"按钮后,程序跳转回第

Android四大组件--Activity详解

Android四大组件--Activity详解 分类: android android应用android开发 本文的主要内容包括1.activity的建立.配置和使用:2.activity的跳转和传值:3.startActivityForResult:4.activity的生命周期. 1.activity的建立.配置和使用 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个可视的窗口,一般情况

Android 四大组件 详解

[置顶] Android四大组件详解 分类: Android四大组件2013-02-09 16:23 19411人阅读 评论(13) 收藏 举报 Android开发 注:本文主要来自网易的一个博主的文章,经过阅读,总结,故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个

Android中Intent组件详解

Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作.与动作有关的数据等.Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将 Intent对象传递给所找到的组件,Android的媒婆任务就完成了. 在Google Doc中是这样描述Intent的(摘自Android中文翻译组)当接收到ContentR

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

Android中Context详解 ---- 你所不知道的Context

转载至 :http://blog.csdn.net/qinjuning 前言:本文是我读<Android内核剖析>第7章 后形成的读书笔记 ,在此向欲了解Android框架的书籍推荐此书. 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 因为我们真正的不懂Context

Android相机开发详解(一)

Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Android相机开发能够实现打开相机,前后摄像头切换,摄像预览,保存图片,浏览已拍照图片等相机功能. Android相机开发详解(一)主要实现打开相机,摄像预览,前后置摄像头切换,保存图片等四个功能. Android相机开发详解(二)主要实现翻页浏览相片,触控缩放浏览图片,删除图片,发送图片等四个功能. Andro