对于activity的启动有两种方式

1.startActivity-这种方式比较简单,我们就不做讲解了

2.startActivityForResult-这种启动方式可以实现父子activity双向数据的传递,下面我们就结合demo学习这种启动方式

直接看代码

下面有三个activity(HeadSetActivity-主activity,MyActivity1,MyActivity2),用的是同一个layout(activity_main.xml),具体如下

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <RelativeLayout
  8. android:id="@+id/abc"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:orientation="vertical" >
  12.  
  13. <TextView
  14. android:id="@+id/tv"
  15. android:layout_width="match_parent"
  16. android:layout_height="400dp"
  17. android:background="@drawable/select"
  18. android:gravity="center"
  19. android:textSize="30dp"
  20. android:text="main_activity"
  21. android:textColor="#ff0000" />
  22.  
  23. <Button
  24. android:id="@+id/bt1"
  25. android:layout_width="170dp"
  26. android:layout_height="100dp"
  27. android:layout_below="@+id/tv"
  28. android:src="@drawable/select"
  29. android:text="activity_1"
  30. android:textColor="#ff0000" />
  31.  
  32. <Button
  33. android:id="@+id/bt2"
  34. android:layout_width="170dp"
  35. android:layout_height="100dp"
  36. android:layout_alignParentRight="true"
  37. android:layout_below="@+id/tv"
  38. android:src="@drawable/select"
  39. android:text="activity_2"
  40. android:textColor="#ff0000" />
  41. </RelativeLayout>
  42.  
  43. </LinearLayout>

HeadSetActivity

  1. package com.example.alert;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6.  
  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 HeadSetActivity extends Activity {
  13. private TextView textView;
  14. private Button button1;
  15. private Button button2;
  16.  
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. textView = (TextView) findViewById(R.id.tv);
  22. button1 = (Button) findViewById(R.id.bt1);
  23. button2 = (Button) findViewById(R.id.bt2);
  24. button1.setOnClickListener(new OnClickListener() {
  25.  
  26. @Override
  27. public void onClick(View arg0) {
  28. // TODO Auto-generated method stub
  29. //启动activity1
  30. Intent intent = new Intent("activity_one");
  31. startActivityForResult(intent, 1);
  32. }
  33. });
  34. button2.setOnClickListener(new OnClickListener() {
  35.  
  36. @Override
  37. public void onClick(View arg0) {
  38. // TODO Auto-generated method stub
  39. //启动activity2
  40. Intent intent = new Intent("activity_two");
  41. startActivityForResult(intent, 2);
  42. }
  43. });
  44.  
  45. }
  46. //这个方法主要是接受子activity返回的数据的
  47. @Override
  48. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  49. // TODO Auto-generated method stub
  50. super.onActivityResult(requestCode, resultCode, data);
  51. //requestCode 这个是启动子activity的时候,父activity给予的标签,父分组管理
  52. //resultCode 这个是子activity返回来的标签,是子activity分组管理
  53. //data里面是子activity返回来的数据
  54. if (requestCode == 1) {
  55. if (resultCode == 10) {
  56.  
  57. String string = data.getExtras().getString("activity_finish");
  58. textView.setText("com from activity 1 and finish"+" \n" + string);
  59.  
  60. } else if (resultCode == 100) {
  61.  
  62. String string = data.getExtras().getString("activity_no_finish");
  63. textView.setText("com from activity 1 and no finish"+" \n" + string);
  64. }
  65. } else if (requestCode == 2) {
  66. if (resultCode == 20) {
  67. textView.setText("com from activity 2 and finish");
  68. } else if (resultCode == 120) {
  69. textView.setText("com from activity 2 and no finish");
  70. }
  71.  
  72. }
  73. }
  74.  
  75. }

MyActivity1

  1. package com.example.alert;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. import android.widget.TextView;
  10.  
  11. public class MyActivity1 extends Activity {
  12. private TextView textView;
  13. private Button button1;
  14. private Button button2;
  15.  
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. textView = (TextView) findViewById(R.id.tv);
  21. textView.setText("i am activity1");
  22. button1 = (Button) findViewById(R.id.bt1);
  23. button1.setText("setresult but no finish");
  24. button2 = (Button) findViewById(R.id.bt2);
  25. button2.setText("setresult but and finish");
  26. button1.setOnClickListener(new OnClickListener() {
  27.  
  28. @Override
  29. public void onClick(View arg0) {
  30. // TODO Auto-generated method stub
  31. Intent intent = new Intent();
  32. Bundle bundle = new Bundle();
  33. bundle.putString("activity_no_finish", "i am no finish");
  34. intent.putExtras(bundle);
  35.  
  36. //不传输数据
  37. //MyActivity1.this.setResult(100);
  38. //可以传输数据,数字是对应parent 中的resultCode
  39. MyActivity1.this.setResult(100, intent);
  40.  
  41. }
  42. });
  43. button2.setOnClickListener(new OnClickListener() {
  44.  
  45. @Override
  46. public void onClick(View arg0) {
  47. // TODO Auto-generated method stub
  48. Intent intent = new Intent();
  49. Bundle bundle = new Bundle();
  50. bundle.putString("activity_finish", "i am finish");
  51. intent.putExtras(bundle);
  52. MyActivity1.this.setResult(10,intent);
  53. finish();
  54. }
  55. });
  56.  
  57. }
  58.  
  59. }

MyActivity2

  1. package com.example.alert;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9.  
  10. public class MyActivity2 extends Activity {
  11. private TextView textView;
  12. private Button button1;
  13. private Button button2;
  14.  
  15. @Override
  16. public void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. textView = (TextView) findViewById(R.id.tv);
  20. textView.setText("i am activity2");
  21. button1 = (Button) findViewById(R.id.bt1);
  22. button1.setText("setresult but no finish");
  23. button2 = (Button) findViewById(R.id.bt2);
  24. button2.setText("setresult but and finish");
  25. button1.setOnClickListener(new OnClickListener() {
  26.  
  27. @Override
  28. public void onClick(View arg0) {
  29. // TODO Auto-generated method stub
  30. MyActivity2.this.setResult(120);
  31.  
  32. }
  33. });
  34. button2.setOnClickListener(new OnClickListener() {
  35.  
  36. @Override
  37. public void onClick(View arg0) {
  38. // TODO Auto-generated method stub
  39. MyActivity2.this.setResult(20);
  40. finish();
  41. }
  42. });
  43.  
  44. }
  45. }

接下来我们直接演示结果

从上面的结果我们可以总结如下

1.startActivityForResult(intent, 1);第一个参数是父传子数据, 第二个参数是启动组号;

setResult(100, intent),第一个参数是返回组号,第二个参数是返回数据

两个组号定位onActivityResult 方法中的执行项

2.setResult 仅仅是给父activity传递消息跟数据,并不会销毁当前activity,一般我们会在调用setResult方法以后,主动调用finish方法

3.setResult 方法,当启动方式是startActivity的时候,这个方法无效,但也不会有什么异常

4.两个不同的子activity 可以拥有完全一样的启动组好跟返回组号。毕竟onActivityResult方法,只有在子activity返回父activity的时候,才会被触发一次

startActivity-两种start 方式的更多相关文章

  1. Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

    原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...

  2. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  3. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  4. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  5. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

  6. Redis两种持久化方式(RDB&AOF)

    爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...

  7. struts2+spring的两种整合方式

    也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...

  8. easyui datagride 两种查询方式

    easyui datagride 两种查询方式function doReseach() { //$('#tt').datagrid('load', { // FixedCompany: $('.c_s ...

  9. 【Visual Lisp】两种出错处理方式

    两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理. ;;============================================================= ...

  10. 两种include方式及filter中的dispatcher解析

    两种include方式 我自己写了一个original.jsp,另外有一个includedPage.jsp,我想在original.jsp中把includedPage.jsp引进来有两种方式: 1.& ...

随机推荐

  1. 安卓开发--ListView

    package com.zx.listview01; import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...

  2. TYVJ 1340 折半暴搜+二分

    思路: 1. 这 题 不卡常过不去啊-- (先加一个random_shuffle) 首先 我们可以折半 搜这一半可以到达的重量 sort一遍 然后搜另一半 对于路程中每一个解 我们可以二分前一半中加这 ...

  3. 使用Chrome浏览器,让我们远离(所有)广告

    你是否还在为浏览网页时各种广告霸屏而急躁不安?这里分享一个小技巧,如何自动屏蔽各大广告. 这里使用的浏览器是Chrome,直接在Chrome网上应用商店搜索下载安装AdBlock插件(不知道其它浏览器 ...

  4. <Sicily>Fibonacci 2

    一.题目描述 In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn-1 + Fn-2 for n ≥ 2. For exampl ...

  5. rem自适应布局-移动端自适应必备:flexible.js

    http://caibaojian.com/flexible-js.html

  6. Example of working with a dump.

    Let's say that you are looking at a crash dump, so following the first command from this page you do ...

  7. GIMP类似于PhotoShop的开源免费软件

    首先我们先看看他的界面如何,都有哪些功能!而且它支持多种平台,可以在MacOS.Windows.Linux操作系统上使用.非常值得推荐! ​ 1.官方地址下载地址: https://www.gimp. ...

  8. 洛谷 P2630 图像变换

    P2630 图像变换 题目描述 给定3行3列的图像各像素点灰度值,给定最终图像,求最短.字典序最小的操作序列. 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度: B:逆时针旋转90度: ...

  9. fs路径位置与widget路径转换

    var fs = api.require('fs'); fs.exist({ path: 'fs://res/yltmusic.mp4' }, function(ret, err) { if (!re ...

  10. html 笔记2

    .css重用 <style> 如果整个页面的宽度 > 900px时: { .c{ 共有 } .c1{ 独有 } } .c2{ 独有 } </style> <div ...