安卓开发_startActivityForResult的详细用法

一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据

百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求。

正文:

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

这里看下Demo,一共两个activity 

让我们来看下代码:

 1 package other;
 2 
 3 import com.example.allcode.R;
 4 
 5 import android.app.Activity;
 6 import android.content.Intent;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.view.View.OnClickListener;
10 import android.widget.Button;
11 import android.widget.TextView;
12 
13 public class Use_startActivityForResult_frist extends Activity implements OnClickListener{
14     private TextView text_frist;
15     private TextView text_second;
16     private Button btn_frist;
17     private Button btn_second;
18     int requestCode = 0;
19     Intent intent;
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         // TODO Auto-generated method stub
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.other_frist_activity);
25         text_frist = (TextView) findViewById(R.id.id_frist_text);
26         text_second = (TextView) findViewById(R.id.id_second_text);
27         btn_frist = (Button) findViewById(R.id.btn_frist);
28         btn_second = (Button) findViewById(R.id.btn_second);
29         btn_frist.setOnClickListener(this);
30         btn_second.setOnClickListener(this);
31         
32 
33      intent = new Intent();
34     intent.setClass(Use_startActivityForResult_frist.this,Use_startActivityForResult_second.class);
35 
36     }
37     @Override
38     public void onClick(View v) {
39         // TODO Auto-generated method stub
40         switch (v.getId()) {
41         case R.id.btn_frist:
42             // 请求码的值随便设置,但必须>=0
43             requestCode = 0;
44             startActivityForResult(intent, requestCode);
45             break;
46         case R.id.btn_second:
47             requestCode = 2;
48             startActivityForResult(intent, requestCode);
49             break;
50         default:
51             break;
52         }
53         
54     }
55 
56 
57     // 回调方法,从第二个页面回来的时候会执行这个方法
58     @Override
59     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
60         String change01 = data.getStringExtra("change01");       //获取change01 对应的数据
61         String change02 = data.getStringExtra("change02");       //获取change02 对应的数据
62         // 根据上面发送过去的请求吗来区别
63         switch (requestCode) {
64         case 0:
65             text_frist.setText(change01);    //根据请求码执行相应的操作
66             break;
67         case 2:
68             text_second.setText(change02);
69             break;
70         default:
71             break;
72         }
73         
74     }
75 
76 
77 }
 1 package other;
 2 
 3 import com.example.allcode.R;
 4 
 5 import android.app.Activity;
 6 import android.content.Intent;
 7 import android.os.Bundle;
 8 
 9 public class Use_startActivityForResult_second extends Activity{
10     int resultCode = 0;
11         @Override
12         protected void onCreate(Bundle savedInstanceState) {
13             // TODO Auto-generated method stub
14             super.onCreate(savedInstanceState);
15             setContentView(R.layout.other_second_activity);
16             
17             Intent intent = new Intent();
18             intent.putExtra("change01", "第一行值已经改变,现在为:1000");  //给change01参数一个值1000 
19             intent.putExtra("change02", "第二行值已经改变,现在为:2000");  //给change02参数一个值2000    注意这个值,即第二个参数必须是字符串类型的
20             // 设置结果,并进行传送
21             this.setResult(resultCode, intent);
22             this.finish();
23         }
24 
25 }
 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/id_frist_text"
 9     android:layout_width="fill_parent" 
10     android:layout_height="wrap_content" 
11     android:text="第一行文本信息"
12     />
13 <TextView  
14     android:id="@+id/id_second_text"
15     android:layout_width="fill_parent" 
16     android:layout_height="wrap_content" 
17     android:text="第二行文本信息"
18     />
19 <Button 
20     android:id="@+id/btn_frist"
21     android:layout_width="fill_parent" 
22     android:layout_height="wrap_content"
23     android:text="改变第一行文本的值"
24     />
25 <Button 
26     android:id="@+id/btn_second"
27     android:layout_width="fill_parent" 
28     android:layout_height="wrap_content"
29     android:text="改变第二行文本的值"
30     />
31 </LinearLayout>

效果图:

请求码的作用    

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法(该方法需要重写)。

结果码的作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GIS讲堂

安卓中的数据存取

在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式:Preference,File,Sqlite...

13820
来自专栏Android-薛之涛

Android-Activity与Fragmeng的相互传值

方法一: 一般Framgent都不是单独存在的,所以假设如果我们从ActivityA跳转到FragmentA ,而FragmentA的宿主是MainActivi...

48950
来自专栏james大数据架构

实例演示Android异步加载图片

本文给大家演示异步加载图片的分析过程。让大家了解异步加载图片的好处,以及如何更新UI。 首先给出main.xml布局文件: 简单来说就是 LinearLayou...

22250
来自专栏cloudskyme

android开发列表界面

android开发列表界面,上边是一个显示题目,下边显示的是图标,中间显示的是列表。 看一下效果吧 ? 当鼠标点击上之后出现背景图,下面看一下如何做出这样的效果...

44560
来自专栏Android干货

关于Activity之间传送数据

29360
来自专栏java初学

android入门 — ListView点击事件

36990
来自专栏Vamei实验室

安卓第九夜 狂风

我们经常需要在安卓应用中包含简易的网页显示功能。我将在这一讲中实现网页的显示。 《狂风》,来自小Willem,荷兰画派黄金时代的作品。作为当时海上马车夫的荷兰,...

21570
来自专栏知识分享

android客服端+eps8266+单片机+路由器之远程控制系统

用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的。 控制距离有多远---...

78460
来自专栏青蛙要fly的专栏

Android技能树 — LayoutInflater Factory小结

前段时间流行起来了突然不愿意写Shape,Selector文件的文章,然后各种方案,编写自定义View等。那时候大家应该都看到了一篇: 无需自定义View,彻底...

20130
来自专栏7号代码

Android网络与数据存储——SharedPreferences(实现是否开启引导界面)

SharedPreferences保存的数据主要是简单类型的key-value对。

21880

扫码关注云+社区

领取腾讯云代金券