安卓开发_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生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...
随机推荐
- 前端学习之路-CSS介绍,Html介绍,JavaScript介绍
CSS介绍 学前端必备掌握CSS样式,css为层叠样式表,用来定义页面的显示效果,加强用户的体验乐趣,那么如何用css到html中呢? style属性方式 利用标签中的style属性来改变显示样式 & ...
- Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式
Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...
- 用document.readyState实现网页加载进度条
概述 之前以为给网页设置加载进度条很麻烦,今天一学真是超级简单,记录下来供以后开发时参考,相信对其他人也有用. readyState 主要运用了document.readyState和nprogres ...
- location-alias
location /images/ { alias /project/pic/; } 给定的路径对应于location的"/url" 这个URL; /images/f.jpg -- ...
- python库函数Map, Filter and Reduce的用法
python中有三个函数式编程极大的简化了程序的复杂性,这里就做一下讨论和记录. 一 Map:应用在链表输入所有元素的函数,它的格式如下所示: map(function_to_apply, list_ ...
- Mac 远程连接 Windows
推荐使用微软官方发布的 Microsoft Remote Desktop,免费.流畅. 详见:https://docs.microsoft.com/en-us/windows-server/remot ...
- 树莓派+tomcat+mysql安装及配置
0x00 系统:ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi 该版本中apt源在国内访问速度不算慢,可以不换,但软件包不完整,建议添加阿里云源 deb ...
- javascript的作用域和优先级
变量的作用域是在定义时决定的,不是在运行时活动对象是在运行时决定的?如果就创建一个对象,使用完毕就完了,就使用json字面量的方式如果对象被反复创建,反复使用,就使用自定义的构造函数方式优先级内部变量 ...
- 异步加载CSS
说到加载 CSS 这种事儿不是很简单吗?像这样咯: <link rel="stylesheet" href="cssfile.css"> 这不就完事 ...
- python中逻辑运算符“+”的特殊之处
num = num + num 与 num += num 的区别(其他语言中这两种方式可以划等号,但是python中不可以): num = num + num: num = [100] def tes ...