对于activity的启动有两种方式

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

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

直接看代码

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

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <RelativeLayout
android:id="@+id/abc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="@drawable/select"
android:gravity="center"
android:textSize="30dp"
android:text="main_activity"
android:textColor="#ff0000" /> <Button
android:id="@+id/bt1"
android:layout_width="170dp"
android:layout_height="100dp"
android:layout_below="@+id/tv"
android:src="@drawable/select"
android:text="activity_1"
android:textColor="#ff0000" /> <Button
android:id="@+id/bt2"
android:layout_width="170dp"
android:layout_height="100dp"
android:layout_alignParentRight="true"
android:layout_below="@+id/tv"
android:src="@drawable/select"
android:text="activity_2"
android:textColor="#ff0000" />
</RelativeLayout> </LinearLayout>

HeadSetActivity

package com.example.alert;

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 HeadSetActivity extends Activity {
private TextView textView;
private Button button1;
private Button button2; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.tv);
button1 = (Button) findViewById(R.id.bt1);
button2 = (Button) findViewById(R.id.bt2);
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//启动activity1
Intent intent = new Intent("activity_one");
startActivityForResult(intent, 1);
}
});
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//启动activity2
Intent intent = new Intent("activity_two");
startActivityForResult(intent, 2);
}
}); }
//这个方法主要是接受子activity返回的数据的
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//requestCode 这个是启动子activity的时候,父activity给予的标签,父分组管理
//resultCode 这个是子activity返回来的标签,是子activity分组管理
//data里面是子activity返回来的数据
if (requestCode == 1) {
if (resultCode == 10) { String string = data.getExtras().getString("activity_finish");
textView.setText("com from activity 1 and finish"+" \n" + string); } else if (resultCode == 100) { String string = data.getExtras().getString("activity_no_finish");
textView.setText("com from activity 1 and no finish"+" \n" + string);
}
} else if (requestCode == 2) {
if (resultCode == 20) {
textView.setText("com from activity 2 and finish");
} else if (resultCode == 120) {
textView.setText("com from activity 2 and no finish");
} }
} }

MyActivity1

package com.example.alert;

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 MyActivity1 extends Activity {
private TextView textView;
private Button button1;
private Button button2; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.tv);
textView.setText("i am activity1");
button1 = (Button) findViewById(R.id.bt1);
button1.setText("setresult but no finish");
button2 = (Button) findViewById(R.id.bt2);
button2.setText("setresult but and finish");
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("activity_no_finish", "i am no finish");
intent.putExtras(bundle); //不传输数据
//MyActivity1.this.setResult(100);
//可以传输数据,数字是对应parent 中的resultCode
MyActivity1.this.setResult(100, intent); }
});
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("activity_finish", "i am finish");
intent.putExtras(bundle);
MyActivity1.this.setResult(10,intent);
finish();
}
}); } }

MyActivity2

package com.example.alert;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MyActivity2 extends Activity {
private TextView textView;
private Button button1;
private Button button2; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.tv);
textView.setText("i am activity2");
button1 = (Button) findViewById(R.id.bt1);
button1.setText("setresult but no finish");
button2 = (Button) findViewById(R.id.bt2);
button2.setText("setresult but and finish");
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
MyActivity2.this.setResult(120); }
});
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
MyActivity2.this.setResult(20);
finish();
}
}); }
}

接下来我们直接演示结果

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

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. 洛谷P1137 旅行计划 解题报告(拓扑排序+DP)

    我看了一下其他大佬的题解,大部分都是拓扑排序加上DP.那么我想有的人是不明白为什么这么做的,拓扑排序有什么性质使得可以DP呢?下面我就提一下. 对一个有向无环图(Directed Acyclic Gr ...

  2. k-meas非监督聚类分析

    实验名称: k-meas非监督聚类分析   一.实验目的和要求 目的: 加深对非监督学习的理解和认识 掌握聚类方法K-Means算法的设计方法   要求:     根据聚类数据,采用k-Means聚类 ...

  3. PostgreSQL 批量生成数据

    create table user_info(userid int,name text,birthday date,crt_time timestamp without time zone,); in ...

  4. Java SpringMvc Jar包下载及部署方式_转载

    本次来记录一下关于 springmvc jar包的下载以及部署 首先登陆   http://repo.spring.io/release/org/springframework/spring/到里面我 ...

  5. 使用sysbench 对mysql进行性能测试

    使用sysbench 对mysql进行性能测试 sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有My ...

  6. [LNOI2014]LCA 树链剖分 离线 前缀和 思维题

    题目描述:给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. 有q次询问,每 ...

  7. linux指令快速复制粘贴[龟速更新中]

    由于有经常碰到要输入linux指令,但是却忘记了的情况.在家里我把常用的命令放到Xshell的快速命令集,但是在很多情况下不在家,可能用的他人电脑,以及在非Win环境下使用ssh时没有xshell使用 ...

  8. 搭建Lvs负载均衡群集

    一.Lvs详解 lvs内核模型 1.模型分析 用户访问的数据可以进入调度器 匹配调度器分配的虚拟IP|IP+端口(路由走向) 根据调度器的算法确定匹配的服务器 2.调度条件:基于IP.基于端口.基于内 ...

  9. Unity 框架(一)

    当项目需求中,后期可能接入多种输入设备的时候,可以借鉴一下以下代码 using System.Collections; using System.Collections.Generic; using ...

  10. CMSIS-RTOS 时间管理之时间延迟Time Delay

    时间管理 Time Management 此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用. 时间延迟Time Delay 在 ...