安卓开发_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):
- 备库查询导致的ORA-01110错误及修复(r8笔记第67天)
- SQL客户端DBvisualize直接导入数据出现中文乱码
- Python基础整理操作积累
- 让AI给颜值打分?应该是最公正的裁判了!
- orion的简单测试 (r8笔记第75天)
- golang ftp客户端示例 支持断点续传
- python 网页特征提取XPATH(两天玩转) 第一天
- 和开发同学讨论的一个技术问题(r8笔记第73天)
- 剖析Oracle中oerr命令(r8笔记第70天)
- 甜品店切蛋糕问题(动态规划,Go语言实现)
- SQL—复制表结构及其数据
- python连接SQL报错:1366, "Incorrect string value: '\xF0\x9F\x98\x81'
- PCIE的简单配置(r8笔记第82天)
- 7个深度神经网络可视化工具,不可错过!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 第十三篇 zabbix创建Item
- 第十四篇 zabbix创建自定义Item
- 【性能】688- 前端性能优化——从 10 多秒到 1.05 秒
- 第十六篇 zabbix创建Trigger
- 如何通过程序(java代码)提高你的博客访问量
- zabbix_get [12429]: Check access restrictions in Zabbix agent configuration
- 【设计模式】689- TypeScript 设计模式之观察者模式
- Found a swap file by the name ".jsidInspector.py.swp"
- CentOs7下部署tomcat文件服务器
- 【拓展】未来的JavaScript记录与元组
- 【Vuejs】690- Vue新特性:CSS 中使用 JS 变量
- Zabbix监控之从Kafka中获取消费进度和lag
- 将UTC(字符串包含TZ的时间)时间转换成本地时间 python
- centos7安装telnet服务
- linux vim编辑器之环境设置