Android Acitivity之间传递数据的静态工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24118527/article/details/88088500

静态工厂是软件工程中常见的设计思想,而Activity之间的数据传递是Android开发中常见的需求

本文将两者结合,从代码入手,一步步地进行讲解


准备工作

首先我们打开Android Studio

选择新建项目

一路next

默认MainActivity

我们新建一个Activity

命名为NewActivity

我们知道,要在Activity之间传递数据,需要用到intent

以前我们是这样写的


putExtra

我们先在MainActivity的布局文件中添加一个按钮,就像这样

把Button的id设为datatransform

效果是这样的

回到MainActivity,这些是Android Studio帮助我们生成的

添加代码如下

首先我们通过findViewById找到刚刚布局的按钮,然后为其设置监控事件

当按钮被按下时,我们new一个intent的对象,并命名为i,初始化这个对象是从当前的MainActivity到NewActivity的

调用i的putExtra方法,传递我们的数据,这里的数据是以key-value的形式给出的,如图所示

key是date,value是字符串"Hello World"

最后再用startActivity方法,启用新的Activity

MainActivity的部分写好了,我们看一下NewActivity的部分

先看一下NewActivity的布局文件,里面就一个Textview,而且默认是空的

再看一下NewActivity的代码,这是没有修改之前的

添加代码如下

首先定义Intent的引用,并使用getIntent方法获得intent对象

然后使用intent的getStringExtra方法获得数据并显示在TextView上

注意在使用getStringExtra方法时需要指定Key

运行结果

如果我们有很多数据要传,可以考虑使用Bundle包,Bundle包的用法和上面的代码很像,可以参考以下链接:

https://www.cnblogs.com/icyhusky/p/5964756.html


静态工厂方法

在使用上面的方法进行数据传递时,显然两个Activity的Key必须是一致的

在实际开发过程中,往往很多开发者共同完成一个项目,为了保证key值得一致,不出现混乱,需要极大的沟通成本

这样的做法,其实极大提高了程序的耦合性

因此,我们更推荐使用静态工厂方法

直接看代码,我们新建一个Activity,命名为StaticActivity

这些代码是Android Studio帮我们生成的

添加代码如下

我们先创建了3个静态成员变量,然后新建了静态方法newIntent

这个静态方法除了需要上帝类Context之外,还需要3个参数,分别是String、int和float类型

这个方法里做了些事情呢?首先new一个intent对象,并用上帝类Context(哪个Activity调用这个方法,Context就是哪个Activity)和目标Activity,也就是StaticActivity,初始化这个intent

然后,这个intent开始传递数据,数据的Key是StaticActivity指定的(Key的类型是String,因为putExtra的定义就是这样写的),也就是第一个数据的Key是a,第二个数据的key是b,第三个数据的key是c

那么具体的数据是什么,那就要等调用newIntent这个静态工厂函数的类给出了

接下来我们在StaticActivity中把数据显示出来

方法很简单 ,先获取一下intent,然后再用get...Extra方法取出对应key的value

这里的A1、B1、C1就是相应的key

然后再看MainActivity

先把这些注释掉

添加代码如下

很简单,不多说了,调用静态工厂方法,并直接把value给进去即可

运行如下


总结

静态工厂的定义是:由一个工厂对象决定创建出哪一种产品类的实例

我们刚刚的代码里,StaticActivity就是工厂类

这就是静态工厂设计模式的简单应用,这样做可以使代码更易于维护

猜你喜欢

转载自blog.csdn.net/qq_24118527/article/details/88088500