安卓开发_startActivityForResult的详细用法
一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据
百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求。
正文:
startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法。
这里看下Demo,一共两个activity
让我们来看下代码:
- package other;
- import com.example.allcode.R;
- 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;
- import android.widget.TextView;
- public class Use_startActivityForResult_frist extends Activity implements OnClickListener{
- private TextView text_frist;
- private TextView text_second;
- private Button btn_frist;
- private Button btn_second;
- int requestCode = ;
- Intent intent;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.other_frist_activity);
- text_frist = (TextView) findViewById(R.id.id_frist_text);
- text_second = (TextView) findViewById(R.id.id_second_text);
- btn_frist = (Button) findViewById(R.id.btn_frist);
- btn_second = (Button) findViewById(R.id.btn_second);
- btn_frist.setOnClickListener(this);
- btn_second.setOnClickListener(this);
- intent = new Intent();
- intent.setClass(Use_startActivityForResult_frist.this,Use_startActivityForResult_second.class);
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch (v.getId()) {
- case R.id.btn_frist:
- // 请求码的值随便设置,但必须>=0
- requestCode = ;
- startActivityForResult(intent, requestCode);
- break;
- case R.id.btn_second:
- requestCode = ;
- startActivityForResult(intent, requestCode);
- break;
- default:
- break;
- }
- }
- // 回调方法,从第二个页面回来的时候会执行这个方法
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- String change01 = data.getStringExtra("change01"); //获取change01 对应的数据
- String change02 = data.getStringExtra("change02"); //获取change02 对应的数据
- // 根据上面发送过去的请求吗来区别
- switch (requestCode) {
- case :
- text_frist.setText(change01); //根据请求码执行相应的操作
- break;
- case :
- text_second.setText(change02);
- break;
- default:
- break;
- }
- }
- }
第一个Activity
- package other;
- import com.example.allcode.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- public class Use_startActivityForResult_second extends Activity{
- int resultCode = ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.other_second_activity);
- Intent intent = new Intent();
- intent.putExtra("change01", "第一行值已经改变,现在为:1000"); //给change01参数一个值1000
- intent.putExtra("change02", "第二行值已经改变,现在为:2000"); //给change02参数一个值2000 注意这个值,即第二个参数必须是字符串类型的
- // 设置结果,并进行传送
- this.setResult(resultCode, intent);
- this.finish();
- }
- }
第二个Activity
- <?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:id="@+id/id_frist_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="第一行文本信息"
- />
- <TextView
- android:id="@+id/id_second_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="第二行文本信息"
- />
- <Button
- android:id="@+id/btn_frist"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="改变第一行文本的值"
- />
- <Button
- android:id="@+id/btn_second"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="改变第二行文本的值"
- />
- </LinearLayout>
第一个activity对应的布局文件
效果图:
请求码的作用
使用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):
安卓开发_startActivityForResult的详细用法的更多相关文章
- 初学安卓开发随笔之 Intent 用法
首先,对于安卓开发,目前世界上流行的是使用的是Android studio 2.0 .(hh 学着来呗 书上说用这个,,) 今后就定一个计划 每天更新一个Android 随笔,增强一下自控力吧!!! ...
- Android安卓开发环境搭建详细教程
安装目录:步骤1 安装JDK步骤2 安装 Android SDK ----http://www.androiddevtools.cn/ 步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclip ...
- 面向对象 - 1.软件开发/2.异常处理/3.try...except的详细用法
1.软件开发 软件的开发其实一整套规范,我们所学的只是其中的一小部分,一个完整的开发过程,需要明确每个阶段的任务,在保证一个阶段正确的前提下再进行下一个阶段的工作,称之为软件工程 面向对象的软件工程包 ...
- 安卓开发30:AsyncTask的用法
http://blog.csdn.net/initphp/article/details/10392093 安卓开发笔记系列(43) 在开发Android应用时必须遵守单线程模型的原则: Andro ...
- Android开发中Context类的作用以及Context的详细用法
Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大 ...
- 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)
什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...
- 关于安卓开发的学习一:webview
在网上看到几篇不错的博客,分享和学习一下! Android使用WebView加载网页 https://blog.csdn.net/tuke_tuke/article/details/51684254 ...
- 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)
这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...
- 安卓开发笔记——深入Activity
在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...
随机推荐
- System.InvalidOperationException: 可为空的对象必须具有一个值。
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] An unhandled exception has ...
- Python - 集成开发环境Pycharm的使用方法和技巧
PyCharm HomePage:PyCharm 我的Pycharm,我做主 Getting Started with PyCharm Pycharm使用技巧 Documentation & ...
- 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) ——3.Programming assignments : Residual Networks
Residual Networks Welcome to the second assignment of this week! You will learn how to build very de ...
- Java高并发之线程池详解
线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升. ...
- Kafka实战-入门
1.概述 经过一个多月的时间观察,业务上在集成Kafka后,各方面还算稳定,这里打算抽时间给大家分享一下Kafka在实际场景中的一些使用心得.本篇博客打算先给大家入个门,让大家对Kafka有个初步的了 ...
- #14 Python模块
前言 前面的文章中,有许多地方都用到了Python的模块,这个到底是个什么神奇的东西呢?让我们来一起盘它! 一.什么是模块 在前几节中,我们已经接触了一些模块:math.random.time等,它们 ...
- shiro教程3(加密)
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容 概念 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理, ...
- Linux 命令行下光标移动快捷键
常用的快捷键: Ctrl + u 删除光标之前到行首的字符 Ctrl + k 删除光标之后到行尾的字符 Ctrl + a 光标移动到行首 Ctrl + e 光标移动到行尾 Ctrl + l 清屏 Al ...
- Linux中ls命令用法
ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的所有文件及目录的名字. 1)ls –a 显示当前目录中的所有文件,包含隐藏文件 命令: aijian.shi@U-a ...
- MongoDB设计系列
原创文章,如果转载请标明出处.作者. https://www.cnblogs.com/alunchen/p/9762233.html 1 前言 MongoDB作为现今流行的非关系型文档数据库,已经有很 ...