引言

最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识。

android中有一个概念,叫做activity。什么叫做activity呢?中文译为【活动】。我觉得类比到我们.NET里面的话,就好比是WinForm中的Form窗体,或者是ASP.NET中的Page页面,一个activity可以对应一个窗体或者是页面。

既然是窗体、页面就需要通信,需要传值,需要之间的变换。

WinForm窗体变换和ASP.NET中的Page变换

在WinForm中实现窗体变换,也就是一个窗体转到另外一个窗体,我们会写下面的代码(代码是伪代码,没有经过验证,不保证可以运行,只是为了说明问题)。

From frmChild=new frmChild();

frmChild.show();

或者是frmChild.showDialog();之类的,看你需要的模态还是非模态。如果需要传值的话,可以通过构造函数,或者是public属性,或者是指定parent,在child中使用parent属性访问父窗体,然后访问父窗体的属性。回传值也是类似的过程。网上找一下,有一大堆的示例代码可以参考。我的博客也写过几篇窗体传值的博文。

ASP.NET中页面变换,我们可以用redirect,transfer,execute,传值的话,有session,querystring,application,或者是整个页面也可以。

看了上面的方式,你会发现不管是窗体或者是页面,跳转和传值都比较固定。我说的【固定】是说跳转的发起者和目标,也就是说这两者绑定的比较死,不能胡乱跳转。就好比说,detail1点击之后只能跳转到item1,detail2点击之后只能跳转到item2。当然,等你有经验之后,改良你的代码,实现了item和detail的复用,然后加上一些判断,解决了一些问题。但是好像还是感觉有点绑在一起的意思。

Android中的Activity之间的变换

在Android中,activity之间的跳转代码是这样的。

Intent intent = new Intent(com.example.UITutorial_V2Activity.this,com.example.sinaweibo.TestActivity.class);startActivity(intent);

从上面的代码中可以看出来,Intent是com.example.UITutorial_V2Activity和com.example.sinaweibo.TestActivity之间跳转的中介。上面的代码实现了从uitutorial到test的跳转。任何两个activity之间都可以这么跳转,完全没有activity之间的绑定。如果你想传值的话,可以写下面的代码。

Intent intent = new Intent(com.example.UITutorial_V2Activity.this,com.example.layout.layout2Activity.class);Bundle bundle = new Bundle();bundle.putString("key1", "value1");intent.putExtra("key1", bundle);startActivity(intent);

Bundle用来在activity之间传值。回传值是另外的一种方法。反正都不会绑死两个activity。任意两个activity之间的跳转传值,只需要借助intent这个中介就可以了,把目标告诉他, 传值告诉他,他就可以完成。

联想到的

两个窗体变换、传值,可以完全的不绑定,只需要根据窗体变换的约定,交给中介去完成这件事。这么做会给我们带来极大地灵活性,体会提高复用性。也可以扩展开来,两个类之间通信,变换,也可以使用类似的机制,避免绑死两个类,提高独立性。比如说A、B、C两个页面。B页面需要显示单个商品的信息,只需要给他商品ID就可以了,然后B会从后端获取商品的信息来显示。谁都可以呼叫B页面,只要交给中介,然后传值商品ID过来,在B页面的创建过程中,先获取ID,然后从后端获取并显示商品信息,就可以了。在A、C中都可以调用中介来完成到B的跳转,以后加个D也可以跳转到B,不用考虑A、C、D是否存在什么关系。

说到底,这好像是个设计问题,引出来的编码问题。

Technorati 标签: android,intent,窗体跳转,页面跳转,传值

从Android中Activity之间的通信说开来相关推荐

  1. Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息...

    先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest;import android.app.Activity; import andr ...

  2. Android中Activity之间的数据传递(Intent和Bundle)

    当一个Activity启动另一个Activity时,常常会有一些数据传过去,对于Activity之间的数据交换更简单,因为两个Activity之间进行数据传递交换更简单,因为两个Activity之间本 ...

  3. java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  4. 三个activity之间跳转 数据传递_第二百四十二回:Android中Fragment之间的数据传递概述...

    各位看官们大家好,上一回中咱们说的是Android中Activity之间数据传递的例子,这一回咱们说的例子是Fragment之间的数据传递.闲话休提,言归正转.让我们一起Talk Android吧! ...

  5. android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案

    前言 最近一直在想着能否有一种更好的方案来解决:Android中Activity与Fragment之间通信的问题,什么叫更好呢,就是能让Fragment的复用性高,性能还有好(不用反射),代码还要好维 ...

  6. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

  7. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    [正文] 一.接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包.然后新建一个A.java文件: A.java代码如下: 1 package com.cn ...

  8. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  9. Activity——两个Activity之间的通信

    目录 两个Activity之间的通信 第一个Activity 第二个Activity 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远方的路费真的很贵! 两个Activity之间的通信 ...

最新文章

  1. CBNet和DetectoRS:COCO数据集霸榜模型
  2. 客户端JavaScript加密数据,服务端Java解密数据
  3. 编译器中代码自动对齐快捷键
  4. 反射load,loadfile,LoadFrom区别
  5. python uwsgi_Python Web 程序使用 uWSGI 部署
  6. 别了,JavaScript;你好,Blazor
  7. linux文件名快速键入,linux修改文件名【使用模式】
  8. 空值替换为0_Excel查找、替换和定位
  9. Xcode12 兼容iOS14 及下载链接
  10. 大学四年,看过的优质书籍推荐
  11. 货币金融学(2): 利率/金融市场
  12. Charles Error Report
  13. 一分钟读懂dB、dBm、dBw的区别
  14. 将本地代码push到github上
  15. 基于EMC的共模干扰与差模干扰以及抑制方法(转载)
  16. BigDecimal舍入模式(Rounding Modes)
  17. macbook无法下载软件问题解决
  18. base64编码图片数据存储服务器
  19. mysql根据成绩排名次_用mysql语句 实现按成绩 排名次
  20. 【古希腊罗马神话】期末结课论文

热门文章

  1. 2018专业创业赛事服务平台
  2. @Conditional派生注解
  3. nginx rewrite重写与防盗链配置
  4. Kendo UI常用示例汇总(九)
  5. Cocos2d-X中实现菜单特效
  6. Hrefer教程【超越官方】
  7. HDU_Virtual Friends (并查集)
  8. 看有道难题比赛有恶心感 ,付源码挑战,博客园目前纯速度最快。
  9. Python进阶之路 3.4.2 条件语句(if、else和elif)
  10. IT职场常见疾病之“颈椎病”